转换流序列化流打印流commons-ioproperties
Posted junqiang-ma
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了转换流序列化流打印流commons-ioproperties相关的知识,希望对你有一定的参考价值。
Java中传输最频繁是字符但是传输开始用的是字节流<不能看出传输的是啥>所以又有了字符流(底层为字节流);
IO流的分类
|- 字节流
- 字节输入流 InputStream 抽象类
- FileInputStream 操作文件的字节输入流
- 字节输出流 OuputStream抽象类
- FileOutputStream 操作文件的字节输出流
|- 字符流
- 字符输入流 Reader抽象类
- FileReader 用来操作文件的字符输入流(简便的流)
- 字符输出流 Writer抽象类
- FileWriter 用来操作文件的字符输出流(简便的流)
OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节。
它的作用的就是,将字符串按照指定的编码表转成字节,在使用字节流将这些字节写出去。
eg<:>
//创建与文件关联的字节输出流对象
FileOutputStream fos = new FileOutputStream("c:\cn8.txt");
//创建可以把字符转成字节的转换流对象,并指定编码
OutputStreamWriter osw = new OutputStreamWriter(fos,"utf-8");
实现过程:
其实在OutputStreamWriter流中维护自己的高效区,当我们调用OutputStreamWriter对象的write方法时,
会拿着字符到指定的码表中进行查询,把查到的字符编码值转成字节数存放到OutputStreamWriter高效区中。
然后再调用刷新功能,或者关闭流,或者高效区存满后会把高效区中的字节数据使用字节流写到指定的文件中。
InputStreamReader 是字节流通向字符流的桥梁:它使用指定的字符编码表读取字节并将其解码为字符。
它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
eg<:>
/创建读取文件的字节流对象
InputStream in = new FileInputStream("c:\cn8.txt");
//创建转换流对象
//InputStreamReader isr = new InputStreamReader(in);这样创建对象,会用本地默认码表读取,将会发生错误解码的错误
InputStreamReader isr = new InputStreamReader(in,"utf-8");
注意:在读取指定的编码的文件时,一定要指定编码格式,否则就会发生解码错误,而发生乱码现象
java.io.OutputStreamWriter extends Writer 字符转换为字节的桥梁
* 底层:使用的还是父类的write方法 写一个字符 一个字符数组 一个字符数组的一部分
*
* 构造方法
* OutputStreamWriter(OutputStream out)
//不指定格式
eg:OutputStreamWriter osw=new OutputStream(new FileOutputStream("文件路径!"));
* OutputStreamWriter(OutputStream out, String charsetName)
//指定格式
eg:OutputStreamWriter osw=new OutputStream(new FileOutputStream("文件路径!"),"文件格式");
* 参数
* OutputStream out:字节输出流的超类,可以传入任意字节输出流对象
* FileOutputStream
* String charsetName:指定的编码表,编码表不区分大小写 但是不要乱写
* gbk utf-8
java.io.InputStreamReader extends Reader 字节转字符的桥梁
* 底层:使用的还是父类read方法 读一个字符 读一个字符数组
*
* 构造方法
* InputStreamReader(InputStream in)
* InputStreamReader(InputStream in,String charsetName)
* 参数
* InputStream in:字节输入流的超类,可以传入任意字节输入流对象
* FileInputStream
* String charsetName:指定的编码表,编码表不区分大小写 但是不要乱写
* gbk utf-8
用于从流中读取对象的操作流 ObjectInputStream 称为 反序列化流
用于向流中写入对象的操作流 ObjectOutputStream 称为 序列化流
用于操作对象可以把对象写入到流也可以从文件中读取对象
java.io.ObjectOutputStream extends OutputStream 序列化流
* 方法
* void writeObject(Object obj) 写对象
* 构造方法
* ObjectOutputStream(OutputStream out)
* 参数
* OutputStream out:字节输出流超类 ,可以传入其任意子类对象
* FileOutputStream
java.io.ObjectInputStream extends InputStream 反序列化流
* 方法
* Object readObject() 读对象
* 构造方法
* ObjectInputStream(InputStream in)
* 参数
* InputStream in:字节输入流超类,可以传入其任意子类对象
* FileInputStream
自定义的类里面
(必须实现)Serializable序列化接口 实现这个接口可以序列化 不实现了就不能序列化
* 里面没有任何的方法 这种接口 我们称为标记型接口
*
当一个类的对象需要被序列化时,某些属性不需要被序列化
* 静态内容不能序列化
static : 静态关键字, 不能被序列化
* transient:瞬态关键字 唯一的作用 阻止序列化
指定序列号位置
private static final long serialVersionUID = 112123213213213L;
*
* java.io.InvalidClassException: com.itheima03.Person; local class incompatible:
* stream classdesc serialVersionUID = -4590593952347619816,
* local class serialVersionUID = -2922495580370653572
打印流
* 字节打印流 PrintStream
* 构造方法public PrintStream(OutputStream out) 可以接收 字符串路径 file对象 字节输出流
* 字符打印流 PrintWriter
* 构造方法public PrintWriter(Writer out) 可以接收 字符串路径 file对象 字节输出流 字符输出流
eg:
//创建流
//PrintWriter out = new PrintWriter(new FileWriter("printFile.txt"));
* 打印流特点
* 1.打印流只负责输出目的端
* 2.打印流为其他流添加了功能
* 3.打印流不会抛出IO异常
* 4.打印流可以开启自动刷新
* 开启自动刷新的前提
* 1.构造方法中接收的必须是流对象
* PrintWriter(OutputStream out, boolean autoFlush)
* PrintWriter(Writer out, boolean autoFlush)
* boolean autoFlush为true则开启自动刷新
* 2.必须是println printf format方法才可以开启自动刷新
IO流的分类
|- 字节流
|- 字节输入流 InputStream 抽象类
|- FileInputStream 操作文件的字节输入流
|- 字节输出流 OuputStream抽象类
|- FileOutputStream 操作文件的字节输出流
|- 字符流
|- 字符输入流 Reader抽象类
|- FileReader 用来操作文件的字符输入流(简便的流)
|- 字符输出流 Writer抽象类
|- FileWriter 用来操作文件的字符输出流(简便的流)
OutputStream此抽象类,是表示输出字节流的所有类的超类。操作的数据都是字节,定义了输出字节流的基本共性功能方法
OutputStream有很多子类,其中子类FileOutputStream可用来写入数据到文件。
FileOutputStream类,即文件输出流,是用于将数据写入 File的输出流
//可以续写不覆盖
FileOutputStream fos = new FileOutputStream(file, true);
InputStream此抽象类,是表示字节输入流的所有类的超类。
InputStream有很多子类,其中子类FileInputStream可用来读取文件内容。
FileInputStream 从文件系统中的某个文件中获得输入字节
缓冲流,根据流的分类分类字节缓冲流与字符缓冲流。
(字节缓冲流)
写入数据到流中,字节缓冲输出流 BufferedOutputStream
? 读取流中的数据,字节缓冲输入流 BufferedInputStream
(字符缓冲流)
写入数据到流中,字节缓冲输出流 BufferedFileWriter
? 读取流中的数据,字节缓冲输入流 BufferedFileReader
继承者 java.io.InputStream
继承者 java.io.FilterInputStream
继承者 java.io.BufferedInputStream
InputStream(字节抽象类)-------------------BufferedInputStream(字节高效)
FileInputStream(字节普通流)
ObjectInputStream extends InputStream 反序列化流
OuputStream(字节抽象类)---------------------FileOutputStream(字节普通流)
-------------------FilterOutputStream
BufferedOutputStream(字节高效)
PrintStream 字节打印流
------------------- ObjectOutputStream序列化流
Reader(字符抽象类)------------------------BufferedFileWriter(字符高效)
------------------------FileReader(字符普通流)
------------------------InputStreamReader extends Reader 字节转字符的桥梁
Writer(字符抽象类)-----------------------BufferedFileWriter(字符高效)
-----------------------FileWriter(字符普通流)
------------------------字符打印流 PrintWriter 构造方法(public class PrintWriterextends Writer)
-------------------------OutputStreamWriter extends Writer 字符转换为字节的桥梁
Java中传输最频繁是字符但是传输开始用的是字节流<不能看出传输的是啥>所以又有了字符流(底层为字节流);
IO流的分类
|- 字节流
- 字节输入流 InputStream 抽象类
- FileInputStream 操作文件的字节输入流
- 字节输出流 OuputStream抽象类
- FileOutputStream 操作文件的字节输出流
|- 字符流
- 字符输入流 Reader抽象类
- FileReader 用来操作文件的字符输入流(简便的流)
- 字符输出流 Writer抽象类
- FileWriter 用来操作文件的字符输出流(简便的流)
OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节。
它的作用的就是,将字符串按照指定的编码表转成字节,在使用字节流将这些字节写出去。
eg<:>
//创建与文件关联的字节输出流对象
FileOutputStream fos = new FileOutputStream("c:\cn8.txt");
//创建可以把字符转成字节的转换流对象,并指定编码
OutputStreamWriter osw = new OutputStreamWriter(fos,"utf-8");
实现过程:
其实在OutputStreamWriter流中维护自己的高效区,当我们调用OutputStreamWriter对象的write方法时,
会拿着字符到指定的码表中进行查询,把查到的字符编码值转成字节数存放到OutputStreamWriter高效区中。
然后再调用刷新功能,或者关闭流,或者高效区存满后会把高效区中的字节数据使用字节流写到指定的文件中。
InputStreamReader 是字节流通向字符流的桥梁:它使用指定的字符编码表读取字节并将其解码为字符。
它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
eg<:>
/创建读取文件的字节流对象
InputStream in = new FileInputStream("c:\cn8.txt");
//创建转换流对象
//InputStreamReader isr = new InputStreamReader(in);这样创建对象,会用本地默认码表读取,将会发生错误解码的错误
InputStreamReader isr = new InputStreamReader(in,"utf-8");
注意:在读取指定的编码的文件时,一定要指定编码格式,否则就会发生解码错误,而发生乱码现象
java.io.OutputStreamWriter extends Writer 字符转换为字节的桥梁
* 底层:使用的还是父类的write方法 写一个字符 一个字符数组 一个字符数组的一部分
*
* 构造方法
* OutputStreamWriter(OutputStream out)
//不指定格式
eg:OutputStreamWriter osw=new OutputStream(new FileOutputStream("文件路径!"));
* OutputStreamWriter(OutputStream out, String charsetName)
//指定格式
eg:OutputStreamWriter osw=new OutputStream(new FileOutputStream("文件路径!"),"文件格式");
* 参数
* OutputStream out:字节输出流的超类,可以传入任意字节输出流对象
* FileOutputStream
* String charsetName:指定的编码表,编码表不区分大小写 但是不要乱写
* gbk utf-8
java.io.InputStreamReader extends Reader 字节转字符的桥梁
* 底层:使用的还是父类read方法 读一个字符 读一个字符数组
*
* 构造方法
* InputStreamReader(InputStream in)
* InputStreamReader(InputStream in,String charsetName)
* 参数
* InputStream in:字节输入流的超类,可以传入任意字节输入流对象
* FileInputStream
* String charsetName:指定的编码表,编码表不区分大小写 但是不要乱写
* gbk utf-8
用于从流中读取对象的操作流 ObjectInputStream 称为 反序列化流
用于向流中写入对象的操作流 ObjectOutputStream 称为 序列化流
用于操作对象可以把对象写入到流也可以从文件中读取对象
java.io.ObjectOutputStream extends OutputStream 序列化流
* 方法
* void writeObject(Object obj) 写对象
* 构造方法
* ObjectOutputStream(OutputStream out)
* 参数
* OutputStream out:字节输出流超类 ,可以传入其任意子类对象
* FileOutputStream
java.io.ObjectInputStream extends InputStream 反序列化流
* 方法
* Object readObject() 读对象
* 构造方法
* ObjectInputStream(InputStream in)
* 参数
* InputStream in:字节输入流超类,可以传入其任意子类对象
* FileInputStream
自定义的类里面
(必须实现)Serializable序列化接口 实现这个接口可以序列化 不实现了就不能序列化
* 里面没有任何的方法 这种接口 我们称为标记型接口
*
当一个类的对象需要被序列化时,某些属性不需要被序列化
* 静态内容不能序列化
static : 静态关键字, 不能被序列化
* transient:瞬态关键字 唯一的作用 阻止序列化
指定序列号位置
private static final long serialVersionUID = 112123213213213L;
*
* java.io.InvalidClassException: com.itheima03.Person; local class incompatible:
* stream classdesc serialVersionUID = -4590593952347619816,
* local class serialVersionUID = -2922495580370653572
打印流
* 字节打印流 PrintStream
* 构造方法public PrintStream(OutputStream out) 可以接收 字符串路径 file对象 字节输出流
* 字符打印流 PrintWriter
* 构造方法public PrintWriter(Writer out) 可以接收 字符串路径 file对象 字节输出流 字符输出流
eg:
//创建流
//PrintWriter out = new PrintWriter(new FileWriter("printFile.txt"));
* 打印流特点
* 1.打印流只负责输出目的端
* 2.打印流为其他流添加了功能
* 3.打印流不会抛出IO异常
* 4.打印流可以开启自动刷新
* 开启自动刷新的前提
* 1.构造方法中接收的必须是流对象
* PrintWriter(OutputStream out, boolean autoFlush)
* PrintWriter(Writer out, boolean autoFlush)
* boolean autoFlush为true则开启自动刷新
* 2.必须是println printf format方法才可以开启自动刷新
IO流的分类
|- 字节流
|- 字节输入流 InputStream 抽象类
|- FileInputStream 操作文件的字节输入流
|- 字节输出流 OuputStream抽象类
|- FileOutputStream 操作文件的字节输出流
|- 字符流
|- 字符输入流 Reader抽象类
|- FileReader 用来操作文件的字符输入流(简便的流)
|- 字符输出流 Writer抽象类
|- FileWriter 用来操作文件的字符输出流(简便的流)
OutputStream此抽象类,是表示输出字节流的所有类的超类。操作的数据都是字节,定义了输出字节流的基本共性功能方法
OutputStream有很多子类,其中子类FileOutputStream可用来写入数据到文件。
FileOutputStream类,即文件输出流,是用于将数据写入 File的输出流
//可以续写不覆盖
FileOutputStream fos = new FileOutputStream(file, true);
InputStream此抽象类,是表示字节输入流的所有类的超类。
InputStream有很多子类,其中子类FileInputStream可用来读取文件内容。
FileInputStream 从文件系统中的某个文件中获得输入字节
缓冲流,根据流的分类分类字节缓冲流与字符缓冲流。
(字节缓冲流)
写入数据到流中,字节缓冲输出流 BufferedOutputStream
? 读取流中的数据,字节缓冲输入流 BufferedInputStream
(字符缓冲流)
写入数据到流中,字节缓冲输出流 BufferedFileWriter
? 读取流中的数据,字节缓冲输入流 BufferedFileReader
继承者 java.io.InputStream
继承者 java.io.FilterInputStream
继承者 java.io.BufferedInputStream
InputStream(字节抽象类)-------------------BufferedInputStream(字节高效)
FileInputStream(字节普通流)
ObjectInputStream extends InputStream 反序列化流
OuputStream(字节抽象类)---------------------FileOutputStream(字节普通流)
-------------------FilterOutputStream
BufferedOutputStream(字节高效)
PrintStream 字节打印流
------------------- ObjectOutputStream序列化流
Reader(字符抽象类)------------------------BufferedFileWriter(字符高效)
------------------------FileReader(字符普通流)
------------------------InputStreamReader extends Reader 字节转字符的桥梁
Writer(字符抽象类)-----------------------BufferedFileWriter(字符高效)
-----------------------FileWriter(字符普通流)
------------------------字符打印流 PrintWriter 构造方法(public class PrintWriterextends Writer)
-------------------------OutputStreamWriter extends Writer 字符转换为字节的桥梁
以上是关于转换流序列化流打印流commons-ioproperties的主要内容,如果未能解决你的问题,请参考以下文章
day17-缓冲流&转换流&序列化流&打印流&Properties
day17-缓冲流&转换流&序列化流&打印流&Properties
转换流序列化流打印流commons-ioproperties