java_缓冲流

缓冲流一共分为四种:字节缓冲输入(输出)流,字符缓冲输入(输出)流;
1- 字节缓冲输出流BufferedOutputStream
继承结构:
构造方法:        
代码演示:
/*
     * 写数据到文件的方法
     * 1,创建流
     * 2,写数据
     * 3,关闭流
     */
    private static void write() throws IOException {
        //创建基本的字节输出流
        FileOutputStream fileOut = new FileOutputStream("abc.txt");
        //使用高效的流,把基本的流进行封装,实现速度的提升
        BufferedOutputStream out = new BufferedOutputStream(fileOut);
        //2,写数据
        out.write("hello".getBytes());
        //3,关闭流
        out.close();
         }

 

2  - 字节缓冲输入流 BufferedInputStream
继承结构:
构造函数:
代码演示:
 
/*
     * 从文件中读取数据
     * 1,创建缓冲流对象
     * 2,读数据,打印
     * 3,关闭
     */
    private static void read() throws IOException {
        //1,创建缓冲流对象
        FileInputStream fileIn = new FileInputStream("abc.txt");
        //把基本的流包装成高效的流
        BufferedInputStream in = new BufferedInputStream(fileIn);
        //2,读数据
        int ch = -1;
        while ( (ch = in.read()) != -1 ) {
            //打印
            System.out.print((char)ch);
        }
        //3,关闭
        in.close();
    }
 
  3- 字符缓冲输出流 BufferedWriter
 
/*
 * BufferedWriter 字符缓冲输出流
 * 方法
 *  public void newLine()写入一个行分隔符
 *
 * 需求: 通过缓冲输出流写入数据到文件
 * 分析:
 *  1,创建流对象
 *  2,写数据
 *  3,关闭流
 *
 */
public class BufferedWriterDemo {
    public static void main(String[] args) throws IOException {
        //创建流
        //基本字符输出流
        FileWriter fileOut = new FileWriter("file.txt");
        //把基本的流进行包装
        BufferedWriter out = new BufferedWriter(fileOut);
        //2,写数据
        for (int i=0; i<5; i++) {
            out.write("hello");
            out.newLine();
        }
        //3,关闭流
        out.close();
    }
}
  4- 字符缓冲输入流 BufferedReader
 
/*
 * BufferedReader 字符缓冲输入流
 *
 * 方法:
 *  String readLine()
 * 需求:从文件中读取数据,并显示数据
 */
public class BufferedReaderDemo {
    public static void main(String[] args) throws IOException {
        //1,创建流
        BufferedReader in = new BufferedReader(new FileReader("file.txt"));
        //2,读数据
        //一次一个字符
        //一次一个字符数组
        //一次读取文本中一行的字符串内容
        String line = null;
        while( (line = in.readLine()) != null ){
            System.out.println(line);
        }
 
        //3,关闭流
        in.close();
    }
}
5- 流的操作规律
 
IO流中对象很多,解决问题(处理设备上的数据时)到底该用哪个对象呢?
把IO流进行了规律的总结(四个明确):
- 明确一:要操作的数据是数据源还是数据目的。
  源:InputStream Reader
  目的:OutputStream Writer
先根据需求明确要读,还是要写。
 
- 明确二:要操作的数据是字节还是文本呢?
  源:
  字节:InputStream
  文本:Reader
  目的:
  字节:OutputStream
  文本:Writer
已经明确到了具体的体系上。
 
- 明确三:明确数据所在的具体设备。
  源设备:
  硬盘:文件 File开头。
  内存:数组,字符串。
  键盘:System.in;
  网络:Socket
  目的设备:
  硬盘:文件 File开头。
  内存:数组,字符串。
  屏幕:System.out
  网络:Socket
完全可以明确具体要使用哪个流对象。
 
- 明确四:是否需要额外功能呢?
  额外功能:
  转换吗?转换流。InputStreamReader OutputStreamWriter
  高效吗?缓冲区对象。BufferedXXX
 
6- 总结
 
  - 知识点总结
 
- 字节流
  - 字节输入流 InputStream
  - FileInputStream 操作文件的字节输入流
  - BufferedInputStream高效的字节输入流
  - 字节输出流 OutputStream
  - FileOutputStream 操作文件的字节输出流
  - BufferedOutputStream 高效的字节输出流
- 字符流
  - 字符输入流 Reader
  - FileReader 操作文件的字符输入流
  - BufferedReader 高效的字符输入流
  - InputStreamReader 输入操作的转换流(把字节流封装成字符流)
  - 字符输出流 Writer
  - FileWriter 操作文件的字符输出流
  - BufferedWriter 高效的字符输出流
  - OutputStreamWriter 输出操作的转换流(把字节流封装成字符流)
 
- 方法:
  - 读数据方法:
  - read() 一次读一个字节或字符的方法
  - read(byte[] char[]) 一次读一个数组数据的方法
  - readLine() 一次读一行字符串的方法(BufferedReader类特有方法)
  - readObject() 从流中读取对象(ObjectInputStream特有方法)
  - 写数据方法:
  - write(int) 一次写一个字节或字符到文件中
  - write(byte[] char[]) 一次写一个数组数据到文件中
  - write(String) 一次写一个字符串内容到文件中
  - writeObject(Object ) 写对象到流中(ObjectOutputStream类特有方法)
  - newLine() 写一个换行符号(BufferedWriter类特有方法)
 
- 向文件中写入数据的过程
1,创建输出流对象
2,写数据到文件
3,关闭输出流
- 从文件中读数据的过程
- 创建输入流对象
- 从文件中读数据
- 关闭输入流
 
- 文件复制的过程
- 创建输入流(数据源)
- 创建输出流(目的地)
- 从输入流中读数据
- 通过输出流,把数据写入目的地
- 关闭流
 
 
 
 
 
 
 
 
 
 
 
posted @ 2017-08-28 14:20  赵安之  阅读(228)  评论(0)    收藏  举报