1. 请描述你理解的IO流的作用
I/O流(输入/输出流)的作用是在程序与外部世界(例如文件、网络、控制台等)之间传输数据。
2. 请描述I/O流的体系结构
(1)InputStream类和OutputStream类,其实现类:FileInputStream和FileOutputStream
(2)Reader类和Writer类,其实现类:FileReader和FileWriter
(3)缓冲流:缓冲流可以提高I/O流的性能,BufferedInputStream、BufferedOutputStream、BufferedReader和BufferedWriter等缓冲流类。
3. 请描述什么情况下需要写出/读取一个字节数组
文件的拷贝、加密、修改文件中的数据
4. 数据读写操作后,为什么要关闭流资源
(1) 释放系统资源:在打开文件或网络连接等操作时,会占用系统资源。如果不关闭流资源,这些资源将一直被占用,直到程序退出。
(2) 避免数据丢失:在进行数据写入操作时,数据通常会被缓存到内存中,而不是立即写入到磁盘或网络连接中。如果不关闭输出流,缓冲区中的数据可能会丢失。
(3) 避免数据损坏:在进行数据写入操作时,如果流没有被正确关闭,可能会导致数据损坏。例如,在写入网络连接时,如果流没有被正确关闭,数据包可能会被截断或丢失,从而导致数据的损坏。
(4) 避免内存泄漏:在进行数据读取操作时,如果不关闭输入流,可能会导致内存泄漏。这是因为输入流可能会在内存中缓存大量数据,这些数据将一直占用内存,直到程序退出。
5. 字节输入流读取文件时,需要注意什么?
(1) 文件路径:在创建字节输入流对象时,需要指定要读取的文件的路径。
(2) 文件存在:如果要读取的文件不存在,将会导致文件读取失败。在读取文件之前,应该确保文件存在。
(3) 文件不存在:如果要读取的文件不存在,将会导致文件读取失败。在读取文件之前,应该确保文件存在。
(4) 缓冲区大小:在读取文件时,可以使用缓冲区来提高读取性能。但是,缓冲区的大小应该适当。如果缓冲区太小,将会导致读取性能下降。如果缓冲区太大,将会占用过多的内存。
(5) 异常处理
6. 请总结字节流与字符流的区别
(1) 组成不同
字节流的组成:字节流是由字节组成的。
字符流的组成:字符流是由字符组成的。
(2)缓冲区不同
(3)操作对象的不同
字节流 :字节读写,字节流(ASCII)处理二进制文件。可以传输音频,视频,图片,文本等,传输数据的基本单位为字节。
字符流:快读写,字符流(Unicode)处理文本文件。只能传输纯文本,传输数据的基本单位为字符 。
(4)两者的处理不同
字节流是最基本的,采用ASCII编码,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的
字符流采用Unicode编码.它是按虚拟机的encode来处理,也就是要进行字符集的转化
7. 请描述字符流的原理
(1)字符流的基本单位是字符:字符流是以Unicode字符为基本单位的,可以读取和写入不同编码的字符数据。
(2)字符流的读取:当读取字符数据时,字符流会根据指定的编码格式将字节数据转换为字符数据。例如,当使用InputStreamReader类读取字符流时,可以指定字符编码格式,例如UTF-8、GBK等。
(3)字符流的写入:当写入字符数据时,字符流会将字符数据转换为字节数据,并写入到底层输出流中。例如,当使用OutputStreamWriter类写入字符流时,可以指定字符编码格式,例如UTF-8、GBK等。
(4)缓冲:字符流可以使用缓冲区来提高读写性能。当读取或写入字符数据时,字符流会将数据存储在缓冲区中,当缓冲区满了或达到一定条件时,才会将缓冲区中的数据写入到底层输入流或输出流中。
(5)自动刷新:字符流还可以自动刷新缓冲区。当缓冲区满了或达到一定条件时,字符流会自动将缓冲区中的数据写入到底层输入流或输出流中。这可以确保数据及时写入底层流中,避免数据丢失。
8. 请描述字节、字符各自的输入流中read(无参)、read(有参)返回值有什么不同
如果不传参,则读取一个字节或字符,如果传参,则读取多个字节或字符。
9.flush()和close()的区别
flush刷新之后,还可以继续往文件中写出数据
close则断开通道,无法再往文件中写出数据
标签:字符,Java,读取,文件,笔记,缓冲区,十四,数据,字节 From: https://www.cnblogs.com/wgh123/p/17456966.html