java.io阻塞io流概述

io流的分类

(1)以数据流的方向划分为:输入流与输出流。

(2)以数据流的传输单位划分为:
a.字节流:InputStream, OutputStream
b.字符流:Reader 和Writer

(3)以数据流的处理方式划分为:节点流和处理流。
InputStream、FileInputStream(对InputStream抽象类的实现)、Reader 、ByteArrayInputStream(可以理解为内存当中的一条输入管道)都是节点流;
BufferedInputStream、FileReader、DataInputStream(直接读基本数据如,readInt) 是处理流
参考如下代码:

import java.io.*;
public class TestDataStream {
  public static void main(String[] args) {
    ByteArrayOutputStream baos = 
                        new ByteArrayOutputStream(); 
                        //节点流,OutputStream抽象类的一种实现
    DataOutputStream dos = 
                        new DataOutputStream(baos);
                        //处理流,可以看做在ByteArrayOutputStream管道上有套了一层管道,可以更方便的保存,而且节省字节,比如一个long类型的数:1234567890只占8字节,而要以字符串保存需要更多的字节
    try {
      dos.writeDouble(Math.random());
      dos.writeBoolean(true);
      ByteArrayInputStream bais = 
          new ByteArrayInputStream(baos.toByteArray());
          //baos.toByteArray()可以看出是内存,此处也可使用file
      System.out.println(bais.available());
      DataInputStream dis = new DataInputStream(bais);
      System.out.println(dis.readDouble());
      System.out.println(dis.readBoolean());
      dos.close();  dis.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

字节流与字符流的转换

InputStreamReader 可以将一个字节流中的字节编码成字符

BufferedReader br = new BufferedReader(new InputStreamReader(System.io));

PrintStream

PrintStream(字节流)\PrintWrite(字符流)类可以将基本数据类型格式化成字符串输出

System.setOut(new PrintStream(FileOutputSteam))

将PrintStream此管道捅到一个文件中,那以后System.out.print()就是直接输出到文件中了

ObjectInputStream/ObjectOutputStream

ObjectInputStream/ObjectOutputStream类用于将序列化的类读取和保存,Serializable接口没有定义任何方法,仅仅作为标记;实现Externalizable extends Serializable接口,可以自己实现Object的读取和写入的过程。transient和static类型的成员变量不会被保存和读取。

你可能感兴趣的:(java,io流)