IO流(4)io包其他功能流对象

来源:互联网 发布:消除噪音软件 编辑:程序博客网 时间:2024/05/21 11:23


IO包中的其他功能流对象。
 功能流对象,特点:解决问题,特有方法

打印流 -- 输出流
***PrintStream:
PrintStream(字节流) PrintWriter(字符流)
特点:打印。不抛异常
打印的目的:File对象,字符串路径,字节输出流
 
解决问题:  方便地打印各种数据值表现形式。
           它的打印方法可以保证数值的表现形式不变。写的是什么样子,目的就是什么样子。

PrintStream out = new PrintStream("tempfile\\print2.txt");
out.write(353);// 结果为a ,一次读最低的一个字节
out.print(97);// 97 保证数值的表现形式,其实原理就是将数值转成字符串。

字节流的write 方法一次只写出一个字节也就是将一个整数的最低8位写出

***PrintWriter:
        一样具备打印功能。 目的:File对象,字符串路径,字节输出流,
        字符输出流。
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw =new PrintWriter(System.out,true);// 对println方法可以实现自动刷新

//目的为文件,且自动刷新:
 pw = new PrintWriter(new BufferedWriter(new FileWriter("1.txt")),true);

while(line=bufr.readLine()!=null)
  pw.println(line.woUpperCase());
 pw.close();
 // bufr.close(); // 不需要关闭键盘录入这种标准输入流,一旦关闭,后面获取不到。

****序列流(SequenceInputStream):
特点: 流对象的有序的排列
解决问题:将多个输入流合并成一个输入流。将多个源合并成一个源。对于多个源的操作会变的简单
 功能: 特殊之处在构造函数上,一初始化就合并了多个流进来

使用场景之一:对多个文件进行数据的合并。多个源对应一个目的。
 ArrayList<FileInputStream> a1 = new ArrayList<FileInputStream>();
 for(int x =1; x<=3;x++)

   a1.add(new FileInputStream("tempfile\\"+x+".txt"));
 }
 Enumeration<FileInputStream> en = Collections.enumeration(a1); // 获取枚举
 SequenceInputStream sis = new SequenceInputStream(en);
FileOutputStream fos = new FileOutputStream("teampfile\\4.txt");
 byte[] buf=new byte[1024];
int len = 0;
while((len=sis.read(buf))!=-1){
 fos.write(buf,0,len);
 }

用于操作对象的流对象: ObjectInputStream 与ObjectOutputStream  (序列化和反序列化)
    被操作的对象需要实现Serializable(标记接口)
解决问题:可以将对象进行序列化和反序列化。 注意:对象序列化一定要实现Serializable接口,为了给类定义一个serialVersionUID
功能:ObjectInputStream readObject()  ObjectOutputstream writeObject()


-----
Person类的对象如果需要序列化,就需要实现Serializable标记接口
该接口给需要序列化的类,提供一个序列版本号,serialVersionUID
该版本号的目的在于验证序列化的对象和对应类是否版本匹配
不匹配导致InvalidClassException
解决: 给类显示声明一个序列版本号

***关键字:瞬态:transient
要想将字段不被序列化,则加上瞬态关键字来修饰,
private transient int age(); // 瞬态

RandomAccessFile:
特点:
   1,只能操作文件
   2,既能读,又能写。
   3,维护了一个byte数组,内部定义了字节流的读取和写入
   4,通过对指针的操作可以实现对文件的任意位置的读取和写入。
       通过seek(int x)来达到随机访问

功能:getFilePointer seek 用于操作文件指针的方法

管道流:

特点: 读取管道和写入管道可以连续。
      需要用多线程技术,单线程容易死锁

功能:connect()

//创建管道对象
  PidedInputStream pis = new PidedInputStream();
  PidedOutputStream pos = new PidedOutputStream();
// 将两个流连接上
  pis.connect(pos);

操作基本数据类型
  DataInputStream 与DataOutputStream

 FileOutputStream fos = new FileOutputStream("teampfile\\data.txt");
 DataOutputStream dos = new DataOutputStream(fos);
 dos.writeBoolean(true); // 读 boolean b = dis.readBoolean();
  dos.close();
操作字节数组
   ByteArrayInputStream 与ByteArrayOutputStream
操作字符数组
  CharArrayReader 与 CharArrayWriter
操作字符串
  StringReader 与 StringWriter


0 0