IO流小知识
IO流小知识
一、字节流小知识
1、概念
IO流即input和output操作,内存数据存储到持久化设备为ouput,持久化设备数据读取到内存为input。
2、分类
(1)字节流
(2)字符流
3、OutputStream
(1)字节输出流 抽象类
(2)常用方法
close----关闭输出流并释放资源
flush----刷新输出流并强制写出缓存字节
write(byte[] b)----从byte数组写入此输出流
(3)FileOutputStream文件输出流:是将数据写入 File
4、InputStream
(1)字节输入流 抽象类
(2)常用方法
read()----从输入流中读取数据的下一个字节
read(byte[] b)----从输入流中读取一定数量的字节,并存储再缓冲数组b中,返回字节数
(3)FileInputStream文件输入流:从文件中获得输入字节
二、缓冲流小知识
1、概念
通过缓冲区读写,可以提高IO流的读写速度
2、分类
- 字节缓冲输出流BufferedOutputStream
- 字节缓冲输入流BufferedInputStream
3、BufferedOutputStream
(1)字节缓冲输出流
(2)将数据写入文件
4、BufferedInputStream
(1)字节缓冲输入流
(2)从文件写入内存
三、字符流小知识
分类
- 字符输入流 Reader ------- 抽象类
- FileReader :操作文件的字符输入流
- 字符输出流 Writer --------抽象类
- FileWriter :操作文件的字符输出流
四、转换流
1、编码
(1)文字--------> 数字 :编码
(2)数字-------->文字 : 解码
2、OutputStreamWriter
(1)将字符流转换成字节流
(2)方法
//创建与文件关联的字节输出流对象
FileOutputStream fos = new FileOutputStream("c:\\xx.txt");
//创建可以把字符转成字节的转换流对象,并指定编码
OutputStreamWriter osw = new OutputStreamWriter(fos,"utf-8");
(3)字符—>编码—>字节
3、InputStreamReader
(1)将字节流转换成字符流
(2)字节—>解码—>字符
五、序列化流与反序列化流
1、定义
ObjectInputStream反序列化流:从流中读取对象
ObjectOutputStream序列化流:向流中写入对象,把对象数据进行持久化存储
2、必要条件
序列化和反序列化必要条件是需要转换的对象支持 java.io.Serializable接口
3、 ObjectOutputStream
writeObect(Object obj)----将指定的对象写入ObjectOutputStream
4、 ObjectInputStream
Object readObject()----从ObjectInputStream读取对象
5、常见异常
(1)NotSerializableException异常原因:
所序列化对象未实现Serializable接口
(2)InvalidClassException异常原因:、
- 该类的序列版本号与从流中读取的类描述符的版本号不匹配
- 该类包含未知数据类型
- 该类没有可访问的无参数构造方法
6、transient关键字
不会序列化:
(1)transient关键字修饰的属性
(2)静态修饰的属性
六、打印流
1、分类
(1)字节打印流 PrintStream
(2)字符打印流 PrintWriter
2、方法
(1)void print(String str): 输出任意类型的数据,
(2)void println(String str): 输出任意类型的数据,自动写入换行操作
七、commons-IO
1、jar包
三方jar包-----commons-io.jar
2、FileUtils类
(1)String readFileToString(File file) :读取文件内容
(2)writeStringToFile(File file,String content):将内容content写入到file
(3)copyFile(File srcFile, File destFile) : 文件复制
(4)copyDirectoryToDirectory(File srcDir,File destDir) : 文件夹复制