内容总结
流
- 流是个抽象的概念,是对输入输出设备的抽象,输入流可以看作一个输入通道,输出流可以看作一个输出通道。
- 输入流是相对程序而言的,外部传入数据给程序需要借助输入流。
- 输出流是相对程序而言的,程序把数据传输到外部需要借助输出流。
流的分类:
四大基本抽象流(输入流,输出流,字符流,字节流)
- 文件流
- 缓冲流
- 转换流
- 数据流
- print流
- object流
按数据流的方向不同可以分为输入流和输出流。
按处理数据单位不同可以分为字节流和字符流。(一个字符是两个字节)
按功能不同可以分为节点(原始)流和处理(包裹)流。
流分类:
- 1.Java的字节流
InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。 - 2.Java的字符流
Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。
InputStream,OutputStream,Reader,writer都是抽象类。所以不能直接new
什么是字节流?
字节流--传输过程中,传输数据的最基本单位是字节的流。
什么是字符流?
字符流--传输过程中,传输数据的最基本单位是字符的流。
字节输出流常用的主要有:
- OutputStream
- FileOutputStream
- BufferedOutputStream 【BufferedOutputStream不是OutputStream的直接实现子类,是FilterOutputStream的子类】
字符输入流常用的主要有:
- Reader
- InputStreamReader
- FileReader
- BufferedReader
字节流与字符流主要的区别是他们的的处理方式
- 字节流操作的基本单元为字节;字符流操作的基本单元为Unicode码元。
- 字节流默认不使用缓冲区;字符流使用缓冲区。
- 字节流通常用于处理二进制数据,实际上它可以处理任意类型的数据,但它不支持直接写入或读取Unicode码元;字符流通常处理文本数据,它支持写入及读取Unicode码元。
字节流 | 字符流 | |
---|---|---|
缓冲区 | 有 | 无 |
类型 | InputStream,OutputStream | Reader,writer |
处理 | 二进制数据 | 文本数据 |
对象 | 序列化 反序列化 | |
关联 | InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联。 |
转换流
- 字节流和字符流是可以进行相互转换的。
- OutputStreamWriter:将字节输出流变为字符输出流(Writer对于文字的输出要比OutputStream方便)
- InputStreamReader:将字节输入流变为字符输入流(InputStream读取的是字节,不方便中文的处理)
package com.company;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception{
File file=new File("C:"+File.separator+"E"+File.separator+"test.txt");
if(!file.getParentFile().exists()){ //必须保证父目录存在
file.getParentFile().mkdirs(); //创建多级父目录`在这里插入代码片`
}
OutputStream output= new FileOutputStream(file);
Writer out=new OutputStreamWriter(output); //字节流转为字符流
out.write("java我不会呀!");
out.close();
}
}
上图!!