#Java IO流总结

java 的io系统简单介绍

io体系 在整个Java.io包中最重要的就是5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable

而且构建出的庞大io类库体系使用了装饰者模式设计

java的io体系可以分为流式和非流式和其他类

  1. 流式部分――IO的主体部分;
  2. 非流式部分――主要包含一些辅助流式部分的类,如:File类、RandomAccessFile类和FileDescriptor等类;
  3. 其他类–文件读取部分的与安全相关的类,如:SerializablePermission类,以及与本地操作系统相关的文件系统的类,如:FileSystem类和Win32FileSystem类和WinNTFileSystem类

io 流

java的流按照输入输出可以分为输入流输出流,按照输入输出内容分为字节流字符流

有四个抽象类:

  1. 字节流 InputStream OutputStream
  2. 字符流 Reader Writer

注:为什么会有两种类型呢?Java中字符是以Unicode形式存储的,一个字符占用两个字节,然而InputStream和OutputStream都是以字节形式读取或写出数据的,会将一个字符拆分成两个字节来读写这样会造成乱码(比如读取或者写出中文)

Java IO流体系中常用的流分类

粗体部分是节点流,其他就是常用的处理流。

流分类 使用分类 字节输入流 字节输出流 字符输入流 字符输出流
  抽象基类 InputStream OutputStream Reader Writer
节点流 访问文件 FileInputStream FileOutStream FileReader FileWriter
节点流 访问数值 ByteArrayInputStream ByteArrayOutStream CharArrayReader CharArrayWriter
节点流 访问管道 PipedInputStream PipedOutStream PipedReader PipedWriter
节点流 访问字符串     StringReader StringWriter
处理流 缓冲流 BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter
处理流 转换流     InputStreamReader OutputStreamWriter
处理流 对象流 ObjectInputStream ObjectOutputStream    
处理流 抽象基类(过滤) FilterInputStream FilterOutputStream FilterReader FilterWriter
流分类 使用分类 字节输入流 字节输出流 字符输入流 字符输出流
处理流 打印流   PrintStream   PrintWriter
处理流 推回输入流 PushbackInputStream   PushbackReader  
处理流 特殊流 DataInputStream DataOutputStream    

常用类的特性

  1. FileOutStream FileWriter 在自定true 来追加内容

  2. StringWriter的 void write(String str)方法 写入一个字符串。

  3. BufferedReader的 String readLine() 方法 读取一个文本行。

  4. InputStreamReader **InputStreamReader(InputStream in,String charsetName) **创建使用指定字符集的 InputStreamReader 可以用来处理中文编码问题

  5. OutputStreamWriter OutputStreamWriter(OutputStream out,String charsetName)创建使用指定字符集的 OutputStreamWriter 可以用来处理中文编码问题

  6. InputStream OutputStream 字节输入输出流常用的读取方法 如下:

    byte[] in = new byte[1024];
    int len = -1;
    while((len = InputStream.read(in))>0){//将读出的字节存放在in字节数组中 并返回读取长度 如果已到达
    		//System.out.println(new String(in,0,len));			//文件末尾,则返回 -1。
        OutputStream.write(in,0,len);//写入一个字节数组in 从位置0开始读到len
        }
    
  7. Reader Writer 字符输入输出流常用的读取方法 将字节的读取方法中的字节数组改成字符数组就可以了

  8. byte[] in = new byte[1024];
    int len = inputStream.read(in);
    String message = new String(in,0,len);