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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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方法是打印在输入的文件中。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马