A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1、缓冲流为什么会提高IO流读写的效率?
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
3、序列化流中的serialVersionUID的作用
4、请根据自己的语言表述IO流的体系

28 个回复

正序浏览
1、缓冲流为什么会提高IO流读写的效率?
JVM建立缓冲流对象时,会同时建立一个缓冲区数组,读写时先将数据存入缓冲区数组,待其存满后再将数据返回,这样一来减少了内存和硬盘的IO次数,也即提高了读写的效率。

2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
当文件的编码格式和解码格式不一致时会发生乱码问题,例如若一个文件编码时用的是GBK格式,而解码时采用的是utf8格式,则显示出来的就是乱码;
可以通过转换流InputStreamReader类和OutputStreamWriter类搭建字符和字节的桥梁,在创建这两个类的对象时指定编码的格式,即可正确的读写文件。

3、序列化流中的serialVersionUID的作用
若某个类的某些对象被序列化后,又对这个类进行了修改,则在反序列化的时候会重新计算序列版本号,前后的序列版本号不一致则反序列化时会抛出 InvalidClassException 异常。
因此在类中加入成员变量serialVersionUID,用static、final和long修饰,这样即使之后修改了类中的内容,序列版本号也不会被修改,因此可以顺利进行反序列化。

4、请根据自己的语言表述IO流的体系
IO流大体以两种划分方式为根本:输入与输出、字节与字符,两两组合成了4种流的根类,也即InputStream、OutputStream、Reader和Writer。在这4个根类之下,又因功能需求的不同,而分别有几个子类,如为解决IO的效率问题的类:缓冲流(BufferedInputStream等);为解决字符和字节转换问题的类:转换流(InputStreamReader、OutputStreamWriter);为解决对象序列化问题的类:ObjectInputStream;还有其他如过滤流(FilterInputStream等)、文件流(FileInputStream等)、管道流(PipedInputStream等)、音频流(AudioInputStream等)等。

回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?缓冲流提供了一个8192的缓冲区,缓冲流减少了的JVM虚拟机到OS之间的交互次数,节省了时间
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
我们的操作系统和IDEA使用的编码器是不同的,在读取相同的字符时,由于在不同的编码表中是用不同的二进制表示的,使用的不是相同的编码表编码和解码的格式不一致就会发生乱码,我们可以使用转换流来解决编解码问题,就是让我们的字节流可以是使用可变的编码集,输入自己需要转化的编码格式,即可进行转化
3、序列化流中的serialVersionUID的作用
提供一个固定不变的序列号,避免序列化失败
4、请根据自己的语言表述IO流的体系

IO流按照流向分分为输入流和输出流
IO流按照格局分分为字节流和字符流
在这些的基础上,又因不同的需求分为不同的流:字节流、字符流、缓冲流、转换流、打印流、序列化流等
这些流都继承了各自父类的成员方法,其中缓冲流中的BufferedReader、和BufferedWriter拥有自己特有的成员方法readLine()和nextLine()以及打印流拥有自己特有的方法println()和print()。缓冲流的作用是增强流的读写速度,转换流的存在是为了实现不同的编码表之间内容的转换
回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?
在创建缓冲流的时候,会创建一个内置的默认大小(8196)的缓冲区数组,会将读取的字节都存储到缓冲区中再进行传输,写入也是通过缓冲区将缓冲区中的字节写入到文件中。通过缓冲区读写,减少java程序和文件的交互次数,从而提高读写的效率。

2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
在读写过程中,如果编码格式和解码格式操作的字符集不一致就会造成乱码。可以通过转换流解决,指定对应的编码格式和解码格式,让们格式相同,就能够解决乱码问题。

3、序列化流中的serialVersionUID的作用

可以固定序列号,让它不会因.class修改发生序列化变化,反序列化时抛出InvalidClassException异常。

4、请根据自己的语言表述IO流的体系
(1)IO流按照流动的方向,以内存为基准,分为输入流和输出流;格局数据的类型分为字节流和字符流。
(2).IO流包括基本字节流,字符流(从字节流衍生而来,由于字节在读取中文时,只能读取中文字符的一部分,产生了字符流),在这两个流的基础上加强的有缓冲流(将两个流进行增强,提高读写的效率),转换流(由于在编码格式和解码格式不一致,出现乱码,需要指定对应编码的字符集和解码字符集,解决编码和解码格式不一致问题),序列化流(将对象封装再进行序列化成字节进行保存,反序列化时将字节转为对象展示,可以防止文本被修改问题)及打印流(为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式),根据具体的应用场景和需求来选择与之对应的流对象进行操作。
回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?
答:通常我们一次读取一个字节数组的话这样会来回多次存取,而缓冲流相当于一个容器,它里面存放的东西就是我们多次取回来的字节数组,等取完了之后,缓冲流会一次性传输,增加效率
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
答:在读写过程中,写的编码和读的编码不一致就会发生乱码问题,比如在win下是默认GBK编码的,idea是UTF-8编码,这个时候用IDEA去读取在win下创建的文件就会发生乱码,解决方法:只要读取的时候用GBK编码去读取就可以解决乱码问题。
3、序列化流中的serialVersionUID的作用
答:序列化流就是我们把对象以流的方式写入到文件中,ObjectIputStream读 和ObjectOutStream写要使用序列化流的话 在类中数据不能加私有和静态 瞬态关键字,否则将无法序列化该属性,序列化流中的serialVersionUID的作用:保证类在序列化后执行反序列化的时候类的完整性。若类在序列化后有过修改则反序列化会失败。
4、请根据自己的语言表述IO流的体系
答:IO流 按类型分 有两类 字节流,字符流,按流向分,有两类 输入流,输出流,
每种流 又细分各种功能不同的流, 字节 字符 都有输入输出流。以及其他的一些流如 缓冲流,序列化流,合并流,随机访问流,内存流 ......




回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?
答:缓冲就相当于一个卡车装载着一推货运输,先把字符或字节先不传输,把它们放入缓冲区(8192),放完在一起读取或写入,比之前一个一个传输运行要快
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?

答:因为编辑时和解码时格式不一样发生乱码问题;用转换流:字节流+编码集或者字符流:字节流+固定的编码集(UTF-8)
3、序列化流中的serialVersionUID的作用
答:serialVersionUID用于验证序列化的对象和对应类是否版本匹配。
4、请根据自己的语言表述IO流的体系
答:                              io流
         本地io流                                        缓冲io流
字节:输出流(FileOutputStream(写) ;  字节缓冲输出流(BufferedOutputStream )
字节:输入流(FileInputStream)(读) ;  字节缓冲输入流( BufferedInputStream )
字符:输出流(FileWriter)   (写)     ;    字符缓冲输出流(  BufferedWriter)
字符:输入流(FileReader) (读) ;    字符缓冲输入流(BufferedReader )
回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?

因为缓冲流在内存中创建了一个缓冲区来储存数据,减少了让读写数据的操作次数,从而降低了文件读写的时间。

2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?

发生乱码的原因都是编解码的格式不同,当编码格式和解码格式不一致的时候,乱码现象就产生了。我们使用转换流来编码指定格式和解码指定格式的文件。

3、序列化流中的serialVersionUID的作用

用来自定义对象的序列化序列号,来防止序列化后对象有修改后,发生反序列化失败现象。

4、请根据自己的语言表述IO流的体系

IO流体系大致分为:

最基本的字节输入/输出流、字符输入/输出流、缓冲输入/输出流、转换输入/输出流、序列化/反序列化流、网络输入/输出流。


+++++++++++++黄成成                                    
回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?
因为在缓冲流中有一个缓冲区。缓冲区的大小是8*1024个字节。
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
在码表不同的时候会出现乱码,码表的格式不同就会乱码。
可以要编码和解码来解决,把看不懂代码解码看懂代码,把看懂的代码编码成看不懂了。

3、序列化流中的serialVersionUID的作用
保证序列化的值是否匹配。

4、请根据自己的语言表述IO流的体系

IO流有
IO流按照流向份输入流输出流,按照格局份有字节流和字符流
在以上4种流的基础上有 缓冲流 序列化流 转换流 打印流
缓冲流的BufferedReader有特有的方法readLine()一次读一行。
和BufferedWritery有特有的方法newLine() 一次写一行。缓冲流的作用是加强读写速度。
转换流是让编码和解码时不会乱码。
打印流有自己特有的方法,print()和println()方法。
回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?
不使用缓冲流是一个一个读写,使用缓冲流后,可以将缓冲区看成一个数组,不用再挨个调用,提高读写效率。
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
编码不一致时会发生乱码问题,在读取文件前采用与之对应的编码表解析文件从而不会产生乱码。
3、序列化流中的serialVersionUID的作用
用于验证序列化对象发送和接受的版本号是否相同
4、请根据自己的语言表述IO流的体系
可以分为字节流:Inputstream输入流;Outputstream输出流
字符流:Reader输入流;Writer输出流
其中又分出了几个子类,如缓冲流,转换流,打印流,序列化流等。

回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?
缓冲流在创建流对象时,会增加一个默认大小8192的缓冲区,可以通过这个缓冲区进行读写,减少了Java程序、JVM和OS系统的交互次数,从而提高IO流读写的效率   

2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
当写入的格式和文件的格式不符时;编码的格式和解码的格式不一致;可以使用转换流中的OutputStreamWriter类,在创造对象时通过构造方法指定对应的编码表,再使用write()方法进行写入

3、序列化流中的serialVersionUID的作用
serialVersionUID  目的在于验证序列化的对象和对应类是否版本匹配。     

4、请根据自己的语言表述IO流的体系
IO流可以看作数据的流动,按方向可以分为输出流(把数据从内存中写入到硬盘中)和输入流(从硬盘中读取数据到内存中);按数据格局可以分为字节流(以字节为单位)、字符流(以字符为单位,适用于文本),字节流分为字节输入/输出流,字符流分为字符输入/输出流;
在此基础上增加了缓冲流,分为字节缓冲流和字符缓冲流(创建流对象时,会增加一个默认大小8192的缓冲区,可以通过这个缓冲区进行读写,减少了Java程序、JVM和OS系统的交互次数,从而提高IO流读写的效率 ),其中字符缓冲流特有方法BufferedReader: public String readLine() : 读一行文字。 BufferedWriter: public void newLine() : 换行;
转换流我们可以自定义编码格式和解码格式解决乱码 问题,转换流分为InputStreamReader和OutputStreamWriter;
序列化分为序列化流ObjectOutputStream:将对象转为二进制存储,反序列化流ObjectInputStream:将二进制转为对象展示;
打印流PrintStream,调用 print()方法和 println()方法,能够方便地打印各种数据类型的值,是一种便捷的输出方式。   
回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?
答:缓冲流 在使用的时候会开辟一块内存作为内存缓冲区,默认大小为8k。
缓冲区存在的意义是减少java程序和jvm、os、文件之间的交互。另外,使用数组进行读取,可以减少文件数据的获取时间。
因为io读写的时间消耗在 1.java程序和jvm、os、文件之间的交互。2.文件储存的二进制数据的获取。


2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
答:乱码的产生是因为:编码和解码的格式不相同导致的。产生原因如:写出数据时是使用utf-8编码,而读取时使用的是GBK编码,就会出现乱码。
解决的方式就是,用文件本身的编码方式读取文件,或者使用读取文件的程序默认的编码方法写出文件。可以使用转换流OutputStreamWriter和InputStreamReader在读取和写出时自定义编码表。


3、序列化流中的serialVersionUID的作用
答:serialVersionUID作用是检测。
       检测序列化的对象和其对应类是否版本匹配。如果不匹配那么反序列化会失败。


4、请根据自己的语言表述IO流的体系
答: IO流体现,就是读取、写出的操作的通道。
按照流向和格局分为 字节输出\输入流 字符输出\输入流。 四大类。
在文件读写使用过程中为了提高读写速度,使用缓冲流。
在文件读写使用过程中为了避免编码和解码的不同导致乱码,使用转换流。方便不同编码格式的相互转换。
还可以把任意对象进行序列化和反序列化操作,把对象和二进制数之间进行转化。



回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?
答:缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率。

2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
答:在IDEA中默认使用的是UTF-8编码,当读取Windows系统中创建的文本文件时,由于Windows系统的默认是GBK编码,就会出现乱码。使用转换流InputStreamReader类和OutputStreamReader类将GBK编码的文本文件转换成UTF-8编码的文本文件。

3、序列化流中的serialVersionUID的作用
答:Serializable接口给需要序列化的类,提供了一个序列版本号,serialVersionUID该版本号的目的在于验证序列化的对象和对应类是否版本匹配。

4、请根据自己的语言表述IO流的体系
答:IO流从流向可分为输出流和输入流。
输出流包括字节输出流OutputStream和字符输出流Writer,输入流包括字节输入流InputStream和字符输入流Reader。
字节输出流的子类包括ObjectOutputStream,FilterOutputStream。
字符输出流的子类包括BufferedWriter,FilterWriter,OutputStreamWriter,PrintWriter。
字节输入流的子类包括ObjectInputStream,FilterInputStream。
字符输入流的子类包括BufferedReader,FilterReader,InputStreamReader。




回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?
        因为我们的缓冲流有一个 8192字节 的缓冲区   减少我们java程序和JVM、OS交互的次数,所以节省了时间,提高了效率
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
        因为编码的格式和解码的格式不一致,会发生写入乱码问题
        转换流:字节流+编码集(可变的)之前的字符流:字节流+固定的编码集(UTF-8)转换流就是能够使用我们自定义的编码格式和解码格式,让他们相同,所以能够解决乱码问题
3、序列化流中的 serialVersionUID 的作用
        Serializable` 接口给需要序列化的类,提供了一个序列版本号。`serialVersionUID` 该版本号的目的在于验证序列化的对象和对应类是否版本匹配。
4、请根据自己的语言表述IO流的体系
        IO流就是对文件进行操作的一系列规范.

回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?
答:对于原来的IO流读写来说,可以理解成空手搬箱子(一共N个),从A搬到B,因为一次只能搬送一个,所以需要来回N次,这样子的效率比较低。
而缓冲流对于原来的IO流读写而言,就相当于,我用一辆车来装箱子进行搬送(每次可以装M个箱子),所以只需要N/M次来回就可以完成搬送,效率就比较高了。


2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
答:当编写的代码格式和读取的代码格式不一致的时候,就会出现乱码问题。
因为对于同一个文字而言,在不同的代码表中所处的是不同的位置,所以如果使用不同的码表去编码解码一个文字,最后的结果会是乱码。
对于乱码的问题本质上就是编码解码格式的不一致,解决方法就是把编码解码的格式统一一致即可。

3、序列化流中的serialVersionUID的作用
答:serialVersionUID是序列号的意思,它根据类的信息进行创建,当类发生改变的时候,serialVersionUID也会发生改变,所以他可以用来保证版本的一致性。
通俗的理解就是:当对象以现在的序列号A 序列化以后,版本发生改变(类发生变化,序列号变为B),当对象需要反序列化的时候,会因为序列号的不一致,而失败,这就保证了版本的一致性。

4、请根据自己的语言表述IO流的体系
答:IO流从大体上有2种分法,根据流向是输出流和输入流(相对于内存而言),根据格局分是字符流和字节流(从本质上而言,所有的IO流都是字节流)。
字节输出输入流因为操作单位为字节,不适合操作文本,适合操作文件。相对的字符输入输出流因为操作对象是字符,所以适合操作文本。
IO流根据功能分还可以分为缓冲流,序列化流,转换流,打印流。这些功能流都是基于字节输入输出流进行包装的。
缓冲流可以分为字节缓冲输出流,字节缓冲输入流,字符缓冲输入流,字符缓冲输出流。工作原理都是把文件或者系统的数据传输到一个缓冲区,再整体进行传输。
转换流可以分为输入流和输出流,可以通过指定的字符集把字符从字节转换为字符或者从字符转换为字节。
序列化流可以分为序列化和反序列化,前一个是把对象转换为二进制字节序列保存到文件种,后一个是把文件种的为禁止字节序列转换会对象形式。再这个过程种会把对象所拥有的序列号一起保存到字节序列中。
打印流是字节输出流的一种子类包装,既拥有字节输出流的一些成员方法(例如write()可以进行字符转换),还拥有自己的方法(print,println,可以原样输出数据信息)
回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?
因为有一个数组缓冲区,有默认的长度8*1024  也可以自己指定长度,同数组一起使用,效率最高


2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
一个文件的创建时用什么编码,在程序中就要指定什么编码来读 ,不然就显示乱码,
读和写要是同一种编码格式,不然也会产生乱码

3、序列化流中的serialVersionUID的作用
这个Uid 可以理解为提供一个固定的编号吧,这样不会因为calss文件改变而无法反序列化,每次找到这个编号就可以了

4、请根据自己的语言表述IO流的体系

内存有中心  进来就叫输入(读取文件也是)  出去就叫输出(写出文件)
  分为字符流和字节流   字节输出,输入流,字符输入,输出流。还有在这些流基础之前包装的流  比如高效缓冲区流   指定编码格式的流   
回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?
因为缓冲流中有一个缓冲区 8192减少我们java程序和JVM、OS交互的次数,所以节省了时间,提高了效率
=======================================================
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
1/因为编码的格式和解码的格式不一致
2/转换流:字节流+编码集(可变的)
2.1/之前的字符流:字节流+固定的编码集(UTF-8)
2.2/转换流就是能够使用我们自定义的编码格式和解码格式,让他们相同,所以能够解决乱码问题==========================================================================
3、序列化流中的serialVersionUID的作用
定义一个常量序列号,这样即使修改了class文件的属性或没有class对象,依然可以反序列化
=========================================================
4、请根据自己的语言表述IO流的体系
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流。流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。IO流的分类:根据处理数据类型的不同分为:字符流和字节流;根据数据流向不同分为:输入流和输出流。




回复 使用道具 举报
1.缓冲流为什么会提高IO流读写的效率?
  因为缓冲流有一个8192字节大小的缓冲区 ,减少java程序和JVM、OS交互的次数,所以节省了时间,提高了效率。


2.我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
   编码的格式和解码的格式不一致的时候会出现乱码问题。
   我们用转换流解决乱码问题。  乱转流就是能够使用我们自定义的编码格式和解码格式,让他们相同就能解决乱码问题。字节流+编码集(可变的)。

3、序列化流中的serialVersionUID的作用    serialVersionUID 该版本号的目的在于验证序列化的对象和对应类是否版本匹配。

4、请根据自己的语言表述IO流的体系
    按流向分:输出流:OutputStream和Writer为基类
                     输入流:InputStream和Reader为基类
    按处理数据单元划分:字节流:字节输入流:InputStream基类
                                                   字节输出流:OutputStream基类
                                      字符流:字符输入流:Reader基类
                                                    字符输出流:Writer基类
   缓冲流:字节缓冲输入流:BufferedInputStream
                字节缓冲输出流:BufferedOutputStream
                字符缓冲输入流: BufferedReader
                 字符缓冲输出流:BufferedWriter



回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?
因为我们的缓冲流有一个缓冲区8192   1024 * 8,减少我们java程序和JVM、OS交互的次数,所以节省了时间,提高了效率
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
当编码的格式和解码的格式不一致时会产生乱码;
使用转换流,转换流就是能够使用我们自定义的编码格式和解码格式,让他们相同,所以能够解决乱码问题;
3、序列化流中的serialVersionUID的作用
给需要序列化和反序列化的类打一个标记,有标记的可以进行序列化和反序列化,没有标记的则抛出无标记异常。
4、请根据自己的语言表述IO流的体系
按操作数据分为字节流和字符流。    按数据的流向分为输入流和输出流。
根据需要的功能不同再细分为各种子类
回复 使用道具 举报
本帖最后由 陈辉阳 于 2019-1-2 21:40 编辑

1、缓冲流为什么会提高IO流读写的效率?
因为缓冲流 有一个缓冲区
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
3、序列化流中的serialVersionUID的作用
4、请根据自己的语言表述IO流的体系



点评

每日总结请认真对待,有利于日后知识点的复习巩固  发表于 2019-1-3 11:08
回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?   
因为缓冲流有一个缓冲区,这个缓冲区一次性存储多次要操作的数据,减少java程序和jvm、os交互的次数,所以会提高效率,如果没有指定缓冲区的大小的话默认情况下是8192字节。           
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
写入的编码格式跟打开文件时的解码格式不一致就会发生写入乱码问题。编码的格式和解码的格式不一致就会产生乱码问题。使用转换流就能够自定义读取文件的解码格式或者写入文件的编码格式,让不一样的格式变成一样就可以解决乱码问题。
3、序列化流中的serialVersionUID的作用
serialVersionUID就是序列号,在序列化流中程序会根据代码给class文件和生成的文件匹配一样的序列号,在反序列化要读取这些信息的时候会比较这两个的序列号是否一样,如果一样就能顺利读取,如果不一样就会抛出异常。我们可以使用静态关键字static 和Final关键字去修饰serialVersionUID,赋值一个固定的常量,这样不管对象的类如何变化序列号都不会改变,也就不会发生反序列化异常。
4、请根据自己的语言表述IO流的体系
1、IO流中有4个基类:1、字节输入流 InputStream  2、字符输入流 Reader 3、字节输出流 OutputStream 4、 字符输出流。
2、按照流向分:输出流和输入流。
3、按照数据传输单位分:字节流:以字节为单位传输数据的流    字符流:以字符为单位传输数据的流。
二者的区别有:
(1)读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。(2)处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据
4、按照流的角色来分,可以分为节点流和处理流。
FileInputStream、FileOutputStream、FileWriter、FileReader等根据一个特地的IO设备(如磁盘、网络)读写数据的流称为节点流,节点流也被称为低级流。
我们今天学的缓冲流、转换流、序列化流都是对一个已经存在的流进行连接或者封装,通过封装后的流来实现数据的读写功能,处理流也被称为高级流。





回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?

因为没有缓冲区的writer流对象和Reader流对象在操作文件的时候是读取一份就写一份,就好比外卖小哥取餐对同一个小区的外卖,拿一份送一份,效率很低,耗时耗力。
有缓存区的BufferedWriter写入流和BufferedReader读取流在创建的时候就一个默认的缓存区数组(8192),是把数据写入在缓存区,然后刷新出缓冲区,一次读取完毕,一次写入完毕,减少读取次数
就好比快递小哥取餐一次性取完然后在小区内送,减少来回次数,省时省力。
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?

因为idea默认的是UTF-8的编码,windows系统默认是GBK编码保存的,编码的格式和解码的格式不同,因此我们在读写的过程中就会出现乱码问题。
因为UTF-8编码中文字符是3个字节,GBK编码中文字符是2个字节,字节单位不同所以产生乱码
我们通过创建InputStreamReader 流的对象,以符合源码文本的编码格式进行读取,之后再创建outStreamwriter流的对象,默认UTF-8的编码(也可以修改自己想要的编码类型),进行写入,从而使文件符合idea默认编码。
3、序列化流中的serialVersionUID的作用
serialVersionUID是序列化标记接口,如果不实现此接口,实行任何序列化和反序列化的操作,将会抛出 NotSerializableException 异常,实现这接口可生成private static finally  longserialVersionUID = 1L确保反序列兼容性。
4、请根据自己的语言表述IO流的体系
io流:文件的读取和输入的过程,且使用完都需要关闭流
io流分为字节输入流,字符输入流,字节输出流,字符输出流,缓存字节输入流,缓存字符输出流
字节输出流和字节输入流:以字节问单位进行文件读写不适合文字文本操作,适合非文字文本操作的输入和输出
字符输入流和字符输出流:以字符为单位进行文件读写只能进行操作文字文本
缓存字节输入流,缓存字符输出流:在创建的时候就一个默认的缓存区数组(8192),一次性读取和一次性写入,相比没后缓冲区的省时省力,但需要刷新。
io流异常的处理
JDK7之前,一般用try-catch-finally处理,且要处理关闭流的异常又要用try-catch比较繁琐
JDK7直接把定义放在Try中,tryj结束就自动关闭流这样就不会和JDK7之前一样要处理定义的异常繁琐的try处理
JDK7之后将定义在try-catch外部,虽然不要进行定义异常的try-catch处理,但是文件找不到异常需要throw声明抛出
综合还是用JDK7方法比较好。
Properties类
hashtable类的子类,是唯一和IO流相关的集合,可以将自定义的类打包成集合写入到文件中,并可以读取出来。
转换流:
因idea默认的解码方式utf-8解码方式和windows编码的方式GBK不同,这时候急需要转换流来解决。
通过创建InputStreamReader 流的对象,以符合源码文本的编码格式进行读取,之后再创建outStreamwriter流的对象,默认UTF-8的编码(也可以修改自己想要的编码类型),进行写入,从而使文件符合idea默认编码。
序列化:
将自定义对象以字节的方式存入的文件中就需要进行序列化持续保存信息在文件中,之后通过反序列化来讲文件读取出来。
serialVersionUID是序列化标记接口,如果不实现此接口,实行任何序列化和反序列化的操作,将会抛出 NotSerializableException 异常。
打印流:
通过PrintStream类创建一个自定义的打印流
调用println方法是打印在控制台上
调用setout方法是打印在输入的文件中。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马