您的位置:首页 > 职场人生

黑马程序员_day25_IO流的其他流

2013-04-12 21:16 295 查看

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

打印流:

PrintStream:

1,使它们能够方便地打印各种数据值表示形式.

2,提供了一系列的打印功能.可以打印任何数据。

3,它的特有的方法不抛出异常。

构造方法:

该流是一个处理目的的流对象。

目的:

1,File对象。 可以指定字符集

2,字符串路径。可以指定字符集

3,字节输出流。可以对println方法进行自动刷新。

Write和print的区别(重要)

PrintStream out = new PrintStream("tempfile\\print_print.txt");

//使用PrintStream继承的方法。write。

out.write(866); //write将接收到整数的最后一个字节写入到流。

//使用PrintStream的特有方法。print.

out.print(865);//print方法,可以将参数的数据表现形式打印到目的中。原理是将97转成字符串,在write到目的。

//print方法打印各种数据都会将其变成字符串。所以可以保证数据的原有表现形式。

out.close();

打印流的另一个比较常用的字符打印流

PrintWriter:字符打印流。

构造函数:

1,File对象。

2,字符串路径。

3,字节输出流。

4,字符输出流。

自动刷新 autoFlush

PrintWriter out = new PrintWriter(System.out,true);

注意传递参数只有是流时,才可以自动刷新,而且当后面的传递参数为true时,才会自动刷新。

//需求:想将键盘录入的数据存储到文件中,并希望自动刷新。

// PrintWriter out = new PrintWriter(new FileWriter("a.txt"),true);

String line = null;

while((line=bufr.readLine())!=null){

if("over".equals(line)){

break;

}

out.write(line.toUpperCase()+"\r\n");

或者写out.println(line.toUpperCase());

}

out.close();

bufr.close();

二、序列流

SequenceInputStream: 序列流。

将多个流进行逻辑串联(进行合并,变成一个流,操作起来很方便,因为多个源变成了一个源)

FileInputStream fis1 = new FileInputStream("tempfile\\seq_1.txt");

FileInputStream fis2 = new FileInputStream("tempfile\\seq_2.txt");

FileInputStream fis3 = new FileInputStream("tempfile\\seq_3.txt");

ArrayList<FileInputStream> v = new ArrayList<FileInputStream>();

v.add(fis1);

v.add(fis2);

v.add(fis3);

枚举对象的获取 ,Collection中的方法。

Enumeration<FileInputStream> en = Collections.enumeration(v);

SequenceInputStream sis = new SequenceInputStream(en);

三、操作对象的类

ObjectInputStream与ObjectOutputStream:

1,可以用流直接操作对象。

writeObj();

readObj();

//反序列化。

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("tempfile\\obj.txt"));

Person p = (Person)ois.readObject();

System.out.println(p.getName()+":"+p.getAge());

ois.close();

}注意:这里的person类要实现 class Person implements Serializable接口

// 序列化。使用ObjectOutputStream写一个对象到文件中。如果目的是硬盘等设备,也就对象的持久化。

public static void writeObj() throws IOException, IOException{

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("tempfile\\obj.txt"));

oos.writeObject(new Person("xiaoming",20));

writeObject()的参数是一个对象。

oos.close();

Serializable:接口

用于给被序列化的类添加一个序列版本号。

private static final long serialVersionUID = 123456L;该数值可以自定义

为了判断序列化的对象和对应的class类是否匹配。

注意:类中的静态数据不会被序列化。

那么非静态数据有些不需要序列化的怎么办呢?这需要一个关键字来完成。transient 瞬间的,暂时的。

四、RandomAccessFile:

1,不是字节流或者字符流体系中的成员。

2,该类是用于操作File的类。

3,该对象既可以读取又可以写入。

4,该对象中封装中了一个byte类型的数组。

5,其实它内部就是封装了字节输入流和字节输出流。

6,通过seek方法设置数组的指针就可以实现对文件数据的随机读写。 可以实现数据的修改。

注意:被操作的数据一定要规律。

五、流规律

明确数据所在的设备:

源设备:

键盘(System.in)

硬盘(FileXXX)FileReader FileInputStream

内存(数组)ByteArrayInputStream CharArrayReader StringReader

网络(Socket)

目的设备:

显示器(控制台System.out)

硬盘(FileXXX)FileWriter FileOutputStream

内存(数组)ByteArrayOutputStream CharArrayWriter StringWriter

网络(Socket)

具体使用哪个对象就可以明确了。

明确是否需要额外功能?

1,是否需要高效?缓冲区Buffered 四个。

2,是否需要转换?转换流 InputStreamReader OutputStreamWriter

3,是否操作基本数据类型? DataInputStream DataOutputStream

4,是否操作对象(对象序列化)? ObjectInputStream ObjectOutputStream

5,需要对多个源合并吗? SequenceInputStream

6,需要保证数据的表现形式到目的地吗? PrintWriter

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: