Java IO流——字节流与字符流

1、Java IO流的概述

  • IO流用来处理设备之间的数据传输
  • Java对数据的操作是通过流的方式
  • Java用于操作流的对象都在IO包中

2、流(Stream)的概念及分类请看:分类

3、IO流常用基类

  • 字节流的抽象基类:InputStreamOutputStream
  • 字符流的抽象基类:ReaderWriter

一、字节流

1、字节流写数据

  • public void write(int b)
  • public void write(byte[] b)
  • public void write(byte[] b,int off,int len)
  • 注意:字节流写如数据后,要 close() 关闭

代码:

package cn.Stream;

import java.io.FileOutputStream;
import java.io.IOException;

public class StreamDemo {
    public static void main(String[] args) throws IOException {
        FileOutputStream f = new FileOutputStream("lemon.txt");
        f.write("让世界充满爱".getBytes());//会删除掉原来的字符文件内容,重写:让世界充满爱
        f.close();//字节流写如数据后,要 close() 关闭
    }
}
package cn.Stream;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class StreamDemo {
    public static void main(String[] args) throws IOException {
        OutputStream f = new FileOutputStream("lemon.txt");//OutputStream 是抽象类,不能实例化,所以用多态
        f.write(new byte[]{97, 98, 99});//删除原来的文件,写入:abc
        f.write(new byte[]{97, 99, 101, 101, 102, 103}, 2, 4);//从第二个开始写入4个
        f.close();
    }
}
package cn.Stream;

import java.util.Arrays;

public class StreamDemo {
    public static void main(String[] args) {
        String s = "中国";
        byte[] b = s.getBytes();
        System.out.println(Arrays.toString(b));
    }
}

注意:中文下 :GBK:3个字节 ,UTF-8:2个字节

2、字节流写入数据,加入异常处理的 IO 流操作

3、字节流读取数据

  • InputStream()
  • FileInputStream()
package cn.Stream;

import java.io.FileInputStream;
import java.io.IOException;

public class StreamDemo {
    public static void main(String[] args) throws IOException {
        // FileInputStream(String name)
        // FileInputStream fis = new FileInputStream("fis.txt");
        FileInputStream fis = new FileInputStream("Lemon.java");

        //		//第一次
        //		int i = fis.read();
        //		System.out.println((char) i);
        //
        //		//第二次
        //		i = fis.read();
        //		System.out.println((char) i);

        //最终版
        int i = -1;
        while ((i = fis.read()) != -1) {
            System.out.print((char) i);
        }

        fis.close();
    }
}

4、FileInputStream的构造方法

  • FileInputStream(File file)
  • FileInputStream(String name)

5、FileInputStream的成员方法

  • public int read()
  • public int read(byte[] b)

6、字节流读取数据

  • 一次读取一个字节
  • 一次读取一个字节数组(每次可以读取多个数据,提高了操作效率

7、字节流复制数据

8、字节缓冲流

  • 字节流一次读写一个数组的速度明显比一次读写一个字节的速度快很多,这是加入了数组这样的缓冲区效果
  • 字节缓冲输出流 BufferedOutputStream
  • 字节缓冲输入流 BufferedInputStream

9、字节缓冲流复制数据

二、字符流

1、OutputStreamWriter 字符输出流

  • public OutputStreamWriter(OutputStream out)
  • public OutputStreamWriter(OutputStream out,String charsetName)

2、InputStreamReader 字符输入流

  • public InputStreamReader(InputStream in)
  • public InputStreamReader(InputStream in,String charsetName)

3、OutputStreamWriter写数据方法

  • public void write(int c)
  • public void write(char[] cbuf)
  • public void write(char[] cbuf,int off,int len)
  • public void write(String str)
  • public void write(String str,int off,int len)

4、字符流操作要注意

  • flush()的作用
  • flush()和close()的区别

5、OutputStreamWriter读数据方法

  • public int read()
  • public int read(char[] cbuf)

6、字符流复制文本文件

7、转换流的简化写法

  • 转换流的名字比较长,而我们常见的操作都是按照本地默认编码实现的,所以,为了简化我们的书写,转换流提供了对应的子类。
  • FileWriter
  • FileReader

8、FileWriter和FileReader

  • FileWriter写数据
  • FileReader读取数据
  • FileWriter和FileReader实现文本文件的复制

9、字符缓冲流

  • BufferedWriter
  • BufferedReader

你可能感兴趣的:(Java)