转换流、序列化流、打印流、commons-io、properties

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 字符转换为字节的桥梁

原文地址:https://www.cnblogs.com/JunQiang-Ma/p/9962681.html

时间: 2024-08-29 16:05:44

转换流、序列化流、打印流、commons-io、properties的相关文章

Java API —— IO流(数据操作流 &amp; 内存操作流 &amp; 打印流 &amp; 标准输入输出流 &amp; 随机访问流 &amp; 合并流 &amp; 序列化流 &amp; Properties &amp; NIO)

1.操作基本数据类型的流 1) 操作基本数据类型 · DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型.应用程序可以使用数据输出流写入稍后由数据输入流读取的数据. · DataOutputStream:数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中.然后,应用程序可以使用数据输入流将数据读入. package datastreamdemos; import java.io.*; /** * Created b

转换流,打印流,序列化

微信公众号:菜鸟永恒 第11天 IO流今日内容介绍?    转换流?    序列化流?    打印流?    Properties今日学习目标?    能够阐述编码表的意义?    能够使用转换流读取指定编码的文本文件?    能够使用转换流写入指定编码的文本文件?    能够使用Properties的load方法加载文件中配置信息?    能够使用Properties的store方法保存配置信息到文件?    能够说出打印流的特点?    能够使用序列化流写出对象到文件?    能够使用反序列

16、IO (Properties、序列化流、打印流、CommonsIO)

Properties集合的特点 * A: Properties集合的特点 * a: Properties类介绍 * Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串 * b: 特点 * Hashtable的子类,map集合中的方法都可以用. * 该集合没有泛型.键值都是字符串. * 它是一个可以持久化的属性集.键值可以存储到集合中,也可以存储到持久化的设备(硬盘.U盘.光盘)上.键值的来源也可以是持久化的设备

IO流—序列化流与打印流

用于从流中读取对象的 操作流 ObjectInputStream    称为 反序列化流 用于向流中写入对象的操作流 ObjectOutputStream   称为 序列化流 特点:用于操作对象.可以将对象写入到文件中,也可以从文件中读取对象. 对象序列化流ObjectOutputStream与对象反序列化流ObjectInputStream ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream.可以使用 ObjectInputStream

JAVA 打印流与转换流

转换流主要有两个 InputStreamReader 和 OutputStreamWriter 1. InputStreamReader 主要是将字节流输入流转换成字符输入流 2. OutputStreamWriter 主要是将字节流输出流转换成字符输出流 打印流主要包含两个:PrintStream 和 PrintWriter,分别对应字节流和字符流 完成屏幕打印的重定向 System.out 对应的就是 PrintStream , 默认在输出在控制台,我们可以重定向他的输出,可以定向到文件 也

Java文件与io——打印流和对象流

打印流的主要功能是用于输出,在整个IO包中打印流分为两种类型: 字节打印流:PrintStream 字符打印流:PrintWriter 打印流可以很方便的进行输出 public class PrintStreamDemo { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub byteStreamOut(); charStreamOut(); } //Pr

25_IO_第25天(Properties、序列化流、打印流、CommonsIO)_讲义

今日内容介绍 1.Properties集合 2.序列化流与反序列化流 3.打印流 4.commons-IO 01Properties集合的特点 * A: Properties集合的特点 * a: Properties类介绍 * Properties 类表示了一个持久的属性集.Properties 可保存在流中或从 * 流中加载.属性列表中每个键及其对应值都是一个字符串 * b: 特点 * Hashtable的子类,map集合中的方法都可以用. * 该集合没有泛型.键值都是字符串. * 它是一个可

IO流之Properties(String键值对)+序列流+打印流+commons-IO(最终流程)

学了这么多全是给他用的之Commons 用这个的前提需要导包, ①创建lib文件夹 ②将下载的commos-io.jar拷贝到lib文件夹 ③右键点击commons-io.jar,Build Path→Add to Build Path 然后介绍两个工具类 1.2 FilenameUtils 这个工具类是用来处理文件名,他可以轻松解决不同操作系统文件名称规范不同的问题 l 常用方法: getExtension(String path):获取文件的扩展名: getName(String filen

序列化流与反序列化流,打印流

序列化流与反序列化流 ObjectOutputStream(序列化流) 将 Java 自定义对象写入 OutputStream.可以使用 ObjectInputStream(反序列化流) 读取对象.通过在流中使用文件可以实现对象的持久存储. ObjectOutputStream 序列化流   writeObject() 将指定的对象写入ObjectOutputStream 例: //创建对象 person per=new person("小红帽",18);//自定义类 //目的地 Fi