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流读写的效率?
缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO
次数,从而提高读写的效率。

2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
文件的编写码不一致时会发生乱码问题;
计算机中储存的信息都是用二进制数表示的,按照某种规则,将字符存储到计算机中,称为编码 。反之,将存储在计算机中的二进制数按照
某种规则解析显示出来,称为解码 。按照A规则存储,再按照B规则解析,就会导致乱码现象。
我们使用转换流 InputStreamReader来对乱码的文件按照文件的指定编码方式进行读取.

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

4、请根据自己的语言表述IO流的体系
Java的IO流是实现输入/输出的基础,它可以方便地实现数据的输入/输出操作,在Java中把不同的输入/输出源抽象表述为"流"。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
根据流的流向以及操作的数据单元不同,将流分为了四种类型,每种类型对应一种抽象基类。这四种抽象基类分别为:InputStream,Reader,OutputStream以及Writer。四种基类下,对应不同的实现类,具有不同的特性。这四大抽象基类,本身并不能创建实例来执行输入/输出,但它们将成为所有输入/输出流的模版,所以它们的方法是所有输入/输出流都可以使用的方法。
(1)  InputStream 是所有的输入字节流的父类,它是一个抽象类,主要包含三个方法:
public void close() :关闭此输入流并释放与此流相关联的任何系统资源。
public abstract int read() : 从输入流读取数据的下一个字节。
public int read(byte[] b) : 从输入流中读取一些字节数,并将它们存储到字节数组 b中 。
(2)  Reader 是所有的输入字符流的父类,它是一个抽象类,主要包含三个方法:
public void close() :关闭此流并释放与此流相关联的任何系统资源。
public int read() : 从输入流读取一个字符。
public int read(char[] cbuf) : 从输入流中读取一些字符,并将它们存储到字符数组 cbuf中 。
(3) OutputStream 是所有的输出字节流的父类,它是一个抽象类,主要包含如下四个方法:
public void close() :关闭此输出流并释放与此流相关联的任何系统资源。
public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。
public void write(byte[] b) :将 b.length字节从指定的字节数组写入此输出流。
public void write(byte[] b, int off, int len) :从指定的字节数组写入 len字节,从偏移量 off开始输
出到此输出流。
public abstract void write(int b) :将指定的字节输出流。
(4)Writer 是所有的输出字符流的父类,它是一个抽象类,主要包含如下六个方法:
void write(int c) 写入单个字符。
void write(char[] cbuf) 写入字符数组。
abstract  void write(char[] cbuf, int off, int len) 写入字符数组的某一部分,off数组的开始索引,len
写的字符个数。
void write(String str) 写入字符串。
void write(String str, int off, int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个
数。
void flush() 刷新该流的缓冲。
void close() 关闭此流,但要先刷新它
回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?
      缓冲流是在创建流对象时,会创建一个内置的默认大小的缓冲区数组(8192),通过缓冲区读写,减少系统和我们程序交换的次数,从而提高读写的效率.
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
      如果文件是用操作系统默认的GBK来进行编码的,那么写入IDEA中会发生乱码问题.应为系统的编码是GBK的,而JBK默认是2个字节保存一个中文,然是在IDEA中,使用的是UTF-8编码,他是使用3个字节保存一个中文,所以在IDEA中打开GBK编码的文字会出现乱码.使用InputStreamReader类和使用OutputStreamReader类 在InputStreamReader类中的构造方法中可以指定编码去解码我们所需要写入的字符.而OutputStreamReader类中的构造方法也能使用指定的编码写出.
3、序列化流中的serialVersionUID的作用
      serialVersionUID的作用是当我们序列化对象时,会给类的class文件生成一个序列号,当我们反序列化时,会比较class文件的序列号和类的序列号,如果序列号不匹配,那么会报出一个异常.我们可以使用Static  final关键字自己定义一个序列号,这样当我们改变类时,也能反序列化成功.
4、请根据自己的语言表述IO流的体系
根据流向可以分为输入流和输出流
       输入流:就是把数据从其他设备中读取到内存中
       输出流:就是把数据从内存中写入到其他设备上
根据数据类型可以分为字符流和字节流
       字符流:以字符为单位读写数据
       字节流:以字节为单位读写数据
字符流的顶级父类是:
Reader:
FileReader继承Reader类,他是将文件读入到内存中,可以读中文
BufferedReader继承Reader类,BufferedReader为字符输入流提供一个一个默认大小的缓冲区,一次读取一个缓冲区里面的内容,缓冲区的默认大小是8192.
Writer:
FileWriter继承Reader类,他是将字符写出到文件中,他也可以写中文
BufferedWriter继承Writer类,BufferedWriter为字符输出流提供一个一个默认大小的缓冲区,一次写一个缓冲区里面的内容,缓冲区的默认大小是8192.
   
字节流的顶级父类是:(不能读取和写出中文,否则会乱码)
InputStream:
FileInputStream继承InputStream类,是将文件读入到内存中,
BufferedInputStream继承FileInputStream类,BufferedInputStream为字符输入流提供一个一个默认大小的缓冲区,一次读取一个缓冲区里面的内容,缓冲区的默认大小是8192.
OutputStream:
FileOutoutStream类继承OutputStream类,是用于将数据写出到文件.当创建一个流对象时,必须要传入一个文件路径,如果没有这个文件,那么会创建该文件,有该文件会清空文件中的数据,如果要启用续写功能则需要在文件路径后面加上true,这样是不会清空文件原有的内容
BufferedOutputStream类继承FileOutoutStream,BufferedOutputStream为字符输出流提供一个一个默认大小的缓冲区,一次写一个缓冲区里面的内容,缓冲区的默认大小是8192.




回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?
因为缓冲流有缓冲区,可以减少java程序和jvm以及os的交互次数,从而提高了效率。

2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
编码的格式和解码的格式不一致的情况下会发生乱码问题。使用转换流,可以使用我们自定义的编码解码格式,可以解决乱码问题。

3、序列化流中的serialVersionUID的作用
在对数据进行修改后,想正常执行反序列化流就必须先执行序列化流,否则会抛出异常,不过如果设置固定serialVersionUID,
那么即使对数据进行修改,在不运行序列化流的情况下也可以执行反序列化流。

4、请根据自己的语言表述IO流的体系
IO指的是Input/Output,IO流:输入输出流。 我们称为数据流。
在Java程序中,对于数据的输入 / 输出操作都是以流的方式进行的;
按流向分:输入流和输出流;
按格局分:字节流个字符流。
回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?

缓冲流在创建对象时,会创建一个内置的默认大小(8192 1024*8)的缓冲区数组,通过缓冲区读写,减少我们与JVM、系统的IO次数,从而提高读写效率。

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

编码的格式和解码的格式不一致,就会出现乱码问题。当读取的文件编码格式与软件默认的编码格式不同,就会产生解码错误从而出现乱码。通过指定编码和解码格式的构造方法,让读取或者写入的编码格式相同,就可以解决乱码问题。

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

serialVersionUID用于验证序列化的对象和对应类是否版本匹配。

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

IO流按流向可以分为:输入流和输出流。
    按格局可以分为:字节流和字符流。
其中,字节流可以分为:字节输出流和字节输入流。
      字符流可以分为:字符输出流和字符输入流。
IO异常处理有三种方式:JDK7前:用try...catch...finally处理
                      JDK7通过将流对象放在try后面的小括号内进行处理。
                      JDK9通过将流对象对应的对象名放到try后面的小括号内进行处理。
缓冲流:在创建对象时,会创建一个内置的默认大小(8192 1024*8)的缓冲区数组,通过缓冲区读写,减少我们与JVM、系统的IO次数,从而提高读写效率。

转换流:用于解决编码和解码过程中因为格式不一致出现的乱码问题,通过指定相应的编码格式,解决乱码问题。
序列化:用一个字节序列表示一个对象,用于存储对象信息。
回复 使用道具 举报
1.缓冲流减少了Java程序和JVM及OS操作系统之间的交互次数。
2.编解码规则不一致时会发生乱码问题;使用转换流解决。
3.serialVersionUID是用来辅助序列化和反序列化过程的,序列化的时候系统会把当前类的serialVersionUID写入序列化的文件中,当反序列化的时候系统会检测当前文件中的serialVersionUID是否和当前类的serialVersionUID一致,如果一致这个时候可以反序列化成功,否则就说明当前类和序列化的类相比发生了某些变换,比如成员变量的数量、类型可能发生了改变,这个时候是无法正常反序列化的
4.根据流向可以分为输出流和输入流,流向是相对与内存来说。根据操作的数据单元又可以分为字节流和字符流,他们的区别为(1)读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
(2)处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。为了提升数据的传输效率,又有缓冲流,缓冲流减少了Java程序和JVM及OS操作系统之间的交互次数,从而提高了程序效率,为了防止编解码规则不一致的问题,又有转换流,转换流是字节和字符之间的桥梁,需要将对象保存到文件中,这时候就需要用到序列化流,序列化流能够转换和重构对象,打印流方便我们输出数据,同时具有改变打印流向的功能。
回复 使用道具 举报

1、缓冲流为什么会提高IO流读写的效率?
缓冲流为自己开辟了一片缓冲区,减少了java程序跟jvm,OS.的交互次数减少了运行时间,提高了效率。
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
当编码格式跟解析格式不一致的时候会发生写入乱码的问题,字符的编码规则不一样;解决办法:在读取或者写入的时候,用转换流来自定义自己想要转换的编码格式。
3、序列化流中的serialVersionUID的作用
在反序列化的时候验证序列化的对象和对应类是否版本匹配,如果不匹配  抛出异常,可以在类中规定好serialVersionUID的值,这样类的内容就算发生改变,也不影响反序列化的进行。
4、请根据自己的语言表述IO流的体系
IO流:从流向上分:输入流跟输出流
         格局上分:字节流跟输出流
InputStream和OutputStream是字节流的顶级父类,字节流有(字节输入流FileInputStream,字节输出流FileOutputStream),Writer和Reader是字符流的顶级父类,字符流有(字符输出流FileWriter,字符输入流FileRead)。按照功能的不同:有缓冲流(字符缓冲流<BufferWriter><BufferReader>跟字节缓冲流<BufferOutputStream,BufferIntputStream>)转换流(IntputStreamReader跟OutputStreamWriter)序列化(ObjectOutputStream)跟反序列化(ObjectIntputStream)打印流(PrintStream)等....。
回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?
是因为在创建流对象时,会创建一个内置默认大小的缓冲区数组,通过缓冲区数组读写,减少系统io的访问次数来提高效率;
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
在读写过程中,因为编码的格式和解码的格式不一致会产生乱码,利用转换流来解决乱码问题;
3、序列化流中的serialVersionUID的作用
手动指定了serialVersionUID的值,就可以很大程度上避免了反序列化的失败,保证serialVersionUID的唯一,因为它被final修饰;
4、请根据自己的语言表述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方法是打印在输入的文件中。
回复 使用道具 举报
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设备(如磁盘、网络)读写数据的流称为节点流,节点流也被称为低级流。
我们今天学的缓冲流、转换流、序列化流都是对一个已经存在的流进行连接或者封装,通过封装后的流来实现数据的读写功能,处理流也被称为高级流。





回复 使用道具 举报
本帖最后由 陈辉阳 于 2019-1-2 21:40 编辑

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



点评

每日总结请认真对待,有利于日后知识点的复习巩固  发表于 2019-1-3 11:08
回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?
因为我们的缓冲流有一个缓冲区8192   1024 * 8,减少我们java程序和JVM、OS交互的次数,所以节省了时间,提高了效率
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
当编码的格式和解码的格式不一致时会产生乱码;
使用转换流,转换流就是能够使用我们自定义的编码格式和解码格式,让他们相同,所以能够解决乱码问题;
3、序列化流中的serialVersionUID的作用
给需要序列化和反序列化的类打一个标记,有标记的可以进行序列化和反序列化,没有标记的则抛出无标记异常。
4、请根据自己的语言表述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减少我们java程序和JVM、OS交互的次数,所以节省了时间,提高了效率
=======================================================
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
1/因为编码的格式和解码的格式不一致
2/转换流:字节流+编码集(可变的)
2.1/之前的字符流:字节流+固定的编码集(UTF-8)
2.2/转换流就是能够使用我们自定义的编码格式和解码格式,让他们相同,所以能够解决乱码问题==========================================================================
3、序列化流中的serialVersionUID的作用
定义一个常量序列号,这样即使修改了class文件的属性或没有class对象,依然可以反序列化
=========================================================
4、请根据自己的语言表述IO流的体系
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流。流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。IO流的分类:根据处理数据类型的不同分为:字符流和字节流;根据数据流向不同分为:输入流和输出流。




回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?
因为有一个数组缓冲区,有默认的长度8*1024  也可以自己指定长度,同数组一起使用,效率最高


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

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

4、请根据自己的语言表述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流读写的效率?
        因为我们的缓冲流有一个 8192字节 的缓冲区   减少我们java程序和JVM、OS交互的次数,所以节省了时间,提高了效率
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
        因为编码的格式和解码的格式不一致,会发生写入乱码问题
        转换流:字节流+编码集(可变的)之前的字符流:字节流+固定的编码集(UTF-8)转换流就是能够使用我们自定义的编码格式和解码格式,让他们相同,所以能够解决乱码问题
3、序列化流中的 serialVersionUID 的作用
        Serializable` 接口给需要序列化的类,提供了一个序列版本号。`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。




回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马