(黑马程序员)IO中的其他功能流对象总结(一)

来源:互联网 发布:怎样用itunes安装软件 编辑:程序博客网 时间:2024/05/17 09:42

IO中的其他功能流对象:

1,打印流:

PrintStream:字节打印流。

特点:

1,构造函数接收File对象,字符串路径,字节输出流。意味着打印目的可以有很多。

2,该对象具备特有的方法 打印方法 print ,println,可以打印任何类型的数据。

3,特有的print方法可以保持任意类型数据表现形式的原样性,将数据输出到目的地。

对于OutputStream父类中的write,是将数据的最低字节写出去。

PrintWriter:字符打印流。

特点:

1,当操作的数据是字符时,可以选择PrintWriter,比PrintStream要方便。

2,它的构造函数可以接收 File对象,字符串路径,字节输出流,字符输出流。

3,构造函数中,如果参数是输出流,那么可以通过指定另一个参数true完成自动刷新,该trueprintln方法有效。

什么时候用?

当需要保证数据表现的原样性时,就可以使用打印流的打印方法来完成,这样更为方便。

保证原样性的原理:其实就是将数据变成字符串,在进行写入操作。

2.SequenceInputStream:

特点:

1,将多个字节读取流和并成一个读取流,将多个源合并成一个源,操作起来方便。

       构造函数接受的数据类型是枚举,Enumeration<FileInputStream> en = v.elements();

2,需要的枚举接口可以通过Collections.enumeration(collection);

应用举例:

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

for(int x=1; x<=3; x++){

al.add(new FileInputStream(x+".txt"));

}

存储流对象的集合

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

返回一个流对象集合的枚举作为参数传给序列流

SequenceInputStream sis = new SequenceInputStream(en);

FileOutputStream fos = new FileOutputStream("1234.txt");

byte[] buf = new byte[1024];

    int len = 0;

while((len=sis.read(buf))!=-1){

fos.write(buf,0,len);

}

fos.close();

sis.close();

}}

3.ObjectInputStream 和 ObjectOutputStream

是操作对象的流,对象序列化与反序列化,即把对象存入硬盘盒从硬盘中读对象出来。存对象的文件一般名字以.object结尾。ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream 读取(重构)对象。通过在流中使用文件可以实现对象的持久存储

它们的构造函数接受的是字节流对象。用writeObjectreadObject方法写对象到基本字节流和从流中读对象。

public static void main(String[] args) throws IOException, ClassNotFoundException {

    writeObj();

readObj();

}

public static void readObj() throws IOException, ClassNotFoundException {

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("obj.object"));

//对象的反序列化。 

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

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

ois.close();

}

public static void writeObj() throws IOException, IOException {

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("obj.object"));

//对象序列化。  被序列化的对象必须实现Serializable接口。 

oos.writeObject(new Person("小强",30));

oos.close();

}}

4.接口 Serializable

   Serializable:用于给被序列化的类加入ID号。

   用于判断类和对象是否是同一个版本。 如果接收者类的 serialVersionUID 与对应的发送者的类的版本号不同,则反序列化将会导致 InvalidClassException。可序列化类可以通过声明名为 "serialVersionUID" 的字段(该字段必须是静态 (static)、最终 

原创粉丝点击