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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

24 个回复

倒序浏览
1、缓冲流为什么会提高IO流读写的效率?
缓冲流一次读取大量数据,再一次性写入,而不是一个一个字节读取写入
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
使用的编码表不同产生乱码问题,可以使用转换流 InputStreamReader 和 OutputStreamWriter 进行读写,转换流可以按照编码表读取字节,再根据编码表径字符转换成字节输出,避免读写过程因为编码的不同而产生乱码
3、请根据自己的语言表述IO流的体系
IO根据功能可以分为输出流和输入流,根据类型可以分为字符流和字节流,字符流就是特殊的字节流;
字符流 Writer  Reader
--FileWriter
        --BufferedFileWriter
--FileReader
        BufferedFileRedader
字节流 InputStream OutputStream
FileInputStream
--BufferedInputStream
FileOutputStream
--BufferedOutputStreaem
转换流
InputStreamReader
OutputStreamWriter
序列流
ObjectInputStream
ObjectOutputStream

点评

发表于 2019-7-22 00:15
回复 使用道具 举报

1、缓冲流为什么会提高IO流读写的效率?
空间换时间
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
不同的编码方式 需要使用相应的解码集进行解码 否则会乱码 outputstreamreader
3、请根据自己的语言表述IO流的体系
      1. File2. InputStream 3. OutputStream4. Reader5. Writer

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

在创建缓冲流对象的时候,会自动创建一个缓冲数组,通过缓冲区IO的读写,来提高的效率.

2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
当写入/读取文件的字符集和操作的字符集不一致时,会发生乱码问题.
可以通过转换流In/OutputStreamReader/Writer来进行与其相对应的转换.

3、请根据自己的语言表述IO流的体系
IO流是字节数据读/写的一个过程.如果以Java为中心,从Java输出到其它文件的为Output(输出),其它文件输入到Java程序的为Input(输入).IO流又包括基本字节流,字符流(从字节流衍生而来),在这两个流的基础上加强的有缓冲流(两个流的增强版,进行高效读写),转换流(出现乱码需要解码,或者需要更改编码的字符集),序列化流(将对象封装成字节序列来永久保存)及打印流(用于便捷打印各种数据),使用方法都大同小异,根据场景和需求来具体选择与之对应的流对象进行操作.




回复 使用道具 举报
杨银万
1、缓冲流为什么会提高IO流读写的效率?
缓冲流在创建时会创建一个默认大小的缓冲区数组,通过缓冲区读写,提高了读写效率
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
当解码与编码使用的编码表不统一时,会产生写入乱码问题
因为idea开发环境默认是使用utf-8编码表,而Windows系统默认使用GBK编码表,所以从系统中读入文件再写出会产生乱码问题。
我们通过转换流在创建时指定编码表解决乱码问题,在读入系统文件时指定GBK编码表,写出到项目中时使用utf-8编码表
3、请根据自己的语言表述IO流的体系
IO流体系分为字节流和字符流,
字节流又分为输入字节流InputStream和输出字节流OutputStream,两个抽象类,输入字节流的子类有文件输入流FileInputStream、缓冲输入流BufferedInputStream、对象反序列化输入流ObjectInputStream。输出字节流的子类有文件输出流FileOutputStream、缓冲输出流BufferedOutputStream、对象序列化输出流ObjectOutputStream、打印流PrintStream。
字符流分为输入字符流Reader和输出字符流Writer,两个抽象类,输入字符流的子类有文件输入流FileReader、缓冲输入流BufferedReader、转换输入流InputStreamReader。输出字符流的子类有文件输出流FileWriter、缓冲输出流BufferedWriter、转换输出流IOutputStreamWriter




回复 使用道具 举报

1、缓冲流为什么会提高IO流读写的效率?
缓冲流在创建时,会内置一个缓冲区来减小实际读写系统IO的次数从而加速读写操作的速度提高效率。
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
当编码和解码过程使用的编码表和字符集不一致的时候,就会发生乱码问题(最常见的情况是中文版Windows默认使用GBK编码的文件被IDEA直接以UTF-8去试图打开的时候)。在Java中解决乱码问题,可以在进行IO操作时候使用转换流,将字节流转换为使用制定编码进行访问的字符流,或者把字符流按照制定编码转化为字节流。
3、请根据自己的语言表述IO流的体系
IO流是Java中对于系统IO资源的访问方式。
IO流以字节流为基础。根据流向(输入还是输出)分为输入流(数组从外部到内存)和输出流(从内存输出到外部)。
为了方便对文本、字符等进行操作,于是乎在以字节流为基础,在结合编码表的情况下,通过转换流而形成了字符流使得对文本的操作更加直观。
为了提升IO操作的效率和速度,又引入了缓冲流,从而大幅度的提高了读写操作的效率。
为了更加方便的进行输出操作,于是又引入了打印流,专门用于把各种数据类型的数据打印输出到流中。
而开发中,为了能把对象永久保存或者实现其网络发送(预习时候看到TCP协议通信在Java也是使用字节流来实现),又引入了序列化流和反序列化流,可以把对象转化成字节序列通过字符流保存起来或者把字节序列还原成对象。
回复 使用道具 举报
贾宗虎

1、缓冲流为什么会提高IO流读写的效率?
因为缓冲流在创建对象的时候,有一个内置的缓冲区,可以减少IO的次数

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

一般是因为文件是用windows下编写的,默认是GBK,在读取的时候,我们默认用UTF-8编码,没有转换编码,产生的乱码
解决: 在读取的时候,用转换流,InputStreamReader,在构造参数中,声明需要的编码格式.

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

IO流是以内存来看,从其他设备的数据流向到内存中的数据流向,叫输入流.
从内存流向其他设备的流向,叫输出流.
从数据类型来分,基本流分为:字节流和字符流
字节流可以操作所有的数据类型,因为所有数据在计算机中都是二进制的存储方式.单位就是字节.
字符流 = 字节流 + 编码表,主要用来操作文本文档类的文件类型

除基本流外: 还有缓冲流,转换流,序列化
缓冲流: 在创建流对象的时候,内置一个缓存区,减少了IO的次数,可以提高效率
转换流: 文件存放在内存或其他设备上的时候,都有默认的编码格式,转换流可以将不同编码之间做转换
序列化: 可以将一个对象,持久性的存放在文件中.还可以把这个文件拿去别的地方用.
            而,将一个文件中的对象,拿出来用的操作,叫反序列化.

点评

写的很好  发表于 2018-7-3 21:45
回复 使用道具 举报
王宇晨 1、缓冲流为什么会提高IO流读写的效率?
在创建流对象时,会创建一个默认大小的数组缓冲区,通过缓冲区读写,减少系统读写次数从而提高IO流读写的效率。
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
因为我们的编译软件默认UTF-8的字符集,当读取Windows文件时,因为Windows默认GBK字符集,所以会产生乱码。
通过创建转换流对象,并指定字符集来解决
3、请根据自己的语言表述IO流的体系
IO流
       字节流
                字节输入流(InputStream)子类FileInputStream
                字节输出流(OutputStream)子类FileOutputStream
       字符流
                字符输入流(Reader)子类FileReader
                字符出输出流(Writer)子类FileWriter
       缓冲流
                 字节缓冲流:字节输入缓冲流(BufferedInputStream),字节输出缓冲流(BufferedOutputStream)
                 字符缓冲流:字符输入缓冲流(BufferedReader),字符输出缓冲流(BufferedWriter)
       转换流:转换输入流(InputStreamReader),转换输出流(OutputStreamWriter)
       序列化流:ObjectOutputStream,反序列化流;ObjectInputStream
       打印流:printStream
回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?

因为缓冲流会在内存中开辟一个空间用于缓冲数据,我们知道CPU操作内存的速度是很快的,而内存对硬盘进行读写的速度相对慢得多。所以缓冲流会提高IO流读写的效率。

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

当原来的数据按照GBK编码保存的时候,而读取的时候IDEA默认是按照UTF-8进行解码,那么就会出现乱码问题。面对此问题,我们对读出来的字节用转换流转成字符后,在对数据进行UTF-8编码,从而解决该问题。

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

IO按照流向分为输入输出。按照数据类型分为字符流和字节流。 字符流的顶层父类是Reader和Writer ,字节流的顶层父类是InputStream和OutputStream 都是抽象类。字符流和字节流很类似,常用的子类都有FileXXXXX流,在输入输出流中都有BufferedXXXX子类中提供高效缓存装饰类。而在字符流中又提供了转换流,用于对字节和字符进行转换。在字节流的子类中又有两个常用的流。一个是对对象进行序列化的流ObjectXXXXX,另一个是PrintStream 打印流。
回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?
缓冲流因为存在一个长度固定大小的缓冲区存放数据,每次缓冲区数据存满的时候再进行存取,而普通的流每次都要进行存取.
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
在文件创建的时候使用的编码和读取的时候使用的解码字符集不一样的时候会发生乱码问题,可以通过转换流解决.
3、请根据自己的语言表述IO流的体系
IO流大体分为字节流和字符流,字符流的底层也是字节流,是通过转换流完成的,还有缓冲流可以更高效的传输字节和字符,序列化和反序列化是传输对象的流,底层也是字节流.

评分

参与人数 1黑马币 +1 收起 理由
a3939889 + 1 山寨

查看全部评分

回复 使用道具 举报

王博

1、缓冲流为什么会提高IO流读写的效率?
创建缓冲流对象时会同时会默认创建一个缓冲区,通过缓冲区读写数据,从而减少IO次数,提高效率


2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
用字节流读写文本文件时,由于一个汉字是多个字节,所以会产生乱码,可以通过字符流读写
然而用字符流读取某些编码不同的文本文件,也会乱码,例如Windows中默认的是GBK编码,IDEA中默认的是UTF-8编码
当将Windows中的文本读取到IDEA就会乱码,可以通过转换流用其相对应的编码进行读取

3、请根据自己的语言表述IO流的体系
IO流就是对数据进行读写操作,将数据从设备读取到内存中是输入流,将内存中的数据写入到设备中是输出流
其中又分为字节流和字符流,字节流一般处理非文本数据,字符流处理文本数据
为了提高效率,又有了缓冲流,通过创建一个缓冲区,从缓冲区中读写数据,大大提高了读写效率
由于数据都是通过编码储存到计算机,不同的编码间就需要转换流操作,不然就会出现乱码
序列化,可将对象储存到文件中,长久的保存,可通过反序列化进行读取
打印流,可以设置打印流向



回复 使用道具 举报
洪文生

1、缓冲流为什么会提高IO流读写的效率?
缓冲流对象在创建的时候会内置一个默认大小的缓存区数组,在缓存区中进行读写,减少了系统的IO系数,提升了读写效率

2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
当从一个以A编码表编码的文件被读取进以B编码表编码的地方就会发生乱码异常。
转换流就是字节和字符之间的桥梁,装换流指定对应的编码表进行读写实现

3、请根据自己的语言表述IO流的体系
IO流按操作数据类型分为字符流和字节流。
字节流的顶级父类OutpurStream和InputStream,其下基本字节流类FileInputStream和FileOutoutStream
字符流的顶级父类是Writer和Reader,其下有两个装换流ObjectOutputStream和ObjectInputStream,两个转换流下对应有两个基本字符流FileWriter和FileReader
缓冲流是对OutpurStream和InputStream的读写能力的增强,分为字节缓冲流和字符缓冲流,字符缓冲流有特有的方法readLine()和newLine()方法。
序列化流ObjectOutpurStream可以将对象序列化进行持久保持和反序列化ObjectInputStream将文件中的对象进行重构。
打印流PrintStream中涉及到System类的setOut方法的设置打印流向,可以流向文件
还涉及IO异常的处理以及解析文件
回复 使用道具 举报
吴佳更
1.创建流对象的时候,创建一个内存默认大小的缓冲区,通过缓冲区的读写,减少系统读写次数从而提高效率。
2.使用的编码字符集不同。不同编码字符集软件无法识别使用另一个编码字符集的文件。我们可以通过转换流,把文件转换成字节,即可识别。
字节再通过我们使用的编码字符集编码成字符。
3.有字节输出流,字节输入流,字符输出流,字符输入流。有转换流,和缓冲流。都是先创建一个流对象,然后对流对象进行操作,最后关闭流。
回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?
因为在创建缓冲流对象的时候 会创建一个内置的默认大小缓冲去数组 通过缓冲区读写 进而提高IO流的效率

2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
发生乱码问题 是因为解码不正确造成的 可以通过字符转换流来解决这个问题

3、请根据自己的语言表述IO流的体系
字节流
  字节输入流InputStream ->BufferedInputStream(自带缓冲区的流)
    操作文件的字节输入流FileInputStream

  字节输出流OutputStream ->BufferedOutputStream(自带缓冲区的流)
    操作文件的字节输出流FileOutputStream
字符流
  字符输入流InputReader ->BufferedReader(自带缓冲区的流)
    操作文件的字符输入流InputStreamReader ->FileReader 便捷类

  字符输出流OutpurWriter ->BufferedWriter(自带缓冲区的流)
    操作文件的字符输出流OutputStreamWriterr ->FileWriter 便捷类


回复 使用道具 举报
郑雪平

今天还是学习IO流,不过今天学的是一种比昨天学的基本流更加强调的流---->缓冲流,按照数据类型分它也是四个流,字节缓冲流: BufferedInputStream , BufferedOutputStream ;字符缓冲流: BufferedReader , BufferedWriter
    字节缓冲流的构造方法:1. BufferedInputStream(InputStream in) ;2. BufferedOutputStream(OutputStream out)
字符缓冲流的构造方法: BufferedReader(Reader in) ; BufferedWriter(Writer out) 它具备的特有方法: readLine() : 读一行文字;  newLine() : 写一行行分隔符。
  转换流是用来进行编码转换的流,包含字符编码和字符集。字符编码是一套自然语言的字符与二进制数之间的对应规则。 字符集 Charset :是一个系统支持的所有字符的集合,包括各国家文字、标点符号、图形符号、数字等,常见字符 集有ASCII字符集、GBK字符集、Unicode字符集等。转换流 InputStreamReader 是Reader的子类。Java 提供了一种对象序列化的机制,一个字节序列可以表示一个对象,该字节序列包含该 对象的数据 、 对象的类型和对象中存储的数据等信息。反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化。
回复 使用道具 举报
吴香斌

1、缓冲流为什么会提高IO流读写的效率?
  缓冲流的内存存在一个长度为8192的char[]字符数组,当做缓冲区来使用,在每次输入输出数据的时候,都会预先把数据加载到缓冲区,然后再由缓冲区来与硬盘进行数据传输.
  因为有这个缓冲区的存在,每次的输出和输出都是相当于在内存中的数据转移, 比内存与硬盘间的数据转移效率提高很多.

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

因为存在一种现象: 有时候不同的操作系统,不同的国家,不同的软件所使用的字符集是不一样.
用一种字符集进行编码的文件,使用另一种字符集进行解码的时候,如果两种字符集不兼容,那么就会发生读入乱码问题.
如何解决:
1)尽量保证字符集统一,或者是可以兼容的
2)若字符集不兼容,则需要使用转换流进行输出与输入.

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

IO流大类分为:字节流和字符流
字节流包括: 普通字节流, 高效缓存字节流, 序列化字节流
字符流包括: 普通字符流, 高效缓存字符流, 转换流
IO流还包括: 打印流
IO流常用工具类有: Files
回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?
1.因为缓冲流在创建流对象时,会创建一个内置的默认大小缓冲区数组,通过缓冲区数组读写,
  减少系统IO次数,从而提高读写效率。
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
2.读取windows创建的文本文件时,因为是默认GBK编码,而读写的IDEA是默认UTF-8编码,所以会出乱码;
  用转换流,InputStreamReader类:是字节流到字符流的桥梁;OutputStreamWriter类:是字符流到字节流的桥梁;
  通过指定编码来正确读写。
3、请根据自己的语言表述IO流的体系
  IO流根据功能分为输出流跟输入流;根据操作的数据类型分为字节流跟字符流;
字节流又分为字节输入流InputStream(有子类FileInputStream)跟字节输出流OutputStream(有子类FileOutputStream
);
字符流分为字符输入流Reader(有子类FileReader)跟字符输出流Writer(有子类FileWriter);
缓冲流分为字节缓冲流跟字符缓冲流;
字节缓冲流分为字节输入缓冲流BufferedInputStream跟字节输出缓冲流BufferedOutputStream;
字符缓冲流分为字符输入缓冲流BufferedReader跟字符输出缓冲流BufferedWriter;
转换流分为转换输入流InputStreamReader,转换输出流OutputStreamWriter;
序列化分为序列化流ObjectOutputStream,反序列化流ObjectInputStream;
打印流 printStream
回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?因为缓冲流里有一个缓冲区,把读到的数据先放在缓冲区当中,这样可以减少频繁的对硬盘读写操作,来提高效率

2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
当不是使用同一套规则的字符集编码表存储时就会出现乱码的情况。例如,Windows操作系统默认使用的是GBK的编码表存储,而Idea默认是使用,UTF-8
存储,这样在存储到本地磁盘的时候就会出现乱码的情况。可以使用转换流来解决这个问题。

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


IO流可分为字节流和字符流两大体系,分别为Writer和Reader,因为是接口,所以无法直接使用。必须使用它的子类FileInputStream、FileOutputStream和FileReder、FileWriter
还有一个就是转换流也是直接实现Reader,打印流是继承FileOutputStream ,系列化流是实现InputStream
回复 使用道具 举报
黄希
1、缓冲流为什么会提高IO流读写的效率?
        在创建缓冲流对象时,内部会创建一个默认大小的缓冲区数组,通过缓冲区读写,减少系统读写次数,从而提高IO流读写的效率。

2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
        读与写操作时,使用的编码不同,造成乱码问题。
        保证读与写操作时,使用同一种编码,解决乱码问题。

3、请根据自己的语言表述IO流的体系
        IO流操作在java.io包下
       
        按照数据的流向分为:输入流和输出流
        按照数据的类型分为:字节流和字符流
       
        字符流专门用于处理文本文件
       
        4个顶级父类:
                字节输入流InputStream
                字节输出流OutputStream
                字符输入流Reader
                字符输出流Writer
               
        InputStream
                FileInputStream                        文件输入流:文件->字节
                FilterInputStream                       
                        BufferedInputStream        字节缓冲流输入流:文件->字节
                ObjectInputStream                        反序列化流:文件->数据
               
        OutputStream
                FileOutputStream                        文件输出流:字节->文件
                FilterOutputStream
                        BufferedOutputStream        字节缓冲流输出流:字节->文件
                        PrintStream                        打印流:用于控制台打印输出,也可以用于输出文件
                ObjectOutputStream                序列化流:数据->文件
               
        Reader
                BufferedReader                        字符缓冲流输入流:文件->字符
                InputStreamReader                        字符转换输入流:字节流->字符流
                        FileReader                        读取字符文件:文件->字符
                       
        Writer
                BufferedWriter                        字符缓冲流输出流:字符->文件
                InputStreamWriter                        字符转换输出流:字符流->字节流
                        FileWriter                        写出字符文件:字符->文件
                       
        缓冲流比基本流更加高效,内部维护了一个默认大小的缓冲区数组,减少了系统读写。

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

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

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

电脑默认为GBk编码,IDea默认UTF-8编码,当在idea中去用默认编码取读入一个
在电脑模式下创建的文件时可能会出现乱码;是由于使用的字符集不一样。读入的时候
指定编码格式解读即可

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

IO流分为输出流(字节OutputStream)(字符Writer)和输入流(字节InputStream)(字符Reader)
输出流:FileOutputStream  FileWtiter BufferedOutputStream  BufferedWriter  OutputSteramWriter   ObjectOutputSteam
输入流:FileInputStream  FileReader BufferedInputStream  BufferedReader     InputSteramReader    ObjectInputSteam
打印流PrintSteam
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马