测试你对InputStream、OutputStream及其子类的掌握程度
正确答案:B
InputStream是所有字节输入流的抽象基类,它定义了读取字节数据的基本方法。Reader是字符流的基类,FileInputStream和BufferedInputStream都是InputStream的具体实现类。
正确答案:B
使用try-with-resources语句是最佳实践,它可以自动管理资源,确保流在使用完毕后被正确关闭,即使发生异常也能保证资源释放。
正确答案:C
BufferedInputStream通过内置缓冲区来减少对底层输入流的系统调用次数,从而显著提高I/O操作的性能,特别是在处理大文件时效果明显。
正确答案:B
DataOutputStream可以将Java基本数据类型(如int、double)和字符串按照二进制格式写入文件,保持数据类型的完整性。这些数据可以用DataInputStream按相同顺序读取。
正确答案:B
ByteArrayOutputStream在内存中操作,将数据写入到内部的字节数组中,不涉及磁盘I/O操作。它支持动态扩容,速度快,适合临时数据处理和数据转换。
正确答案:B
字节流适合处理二进制数据,如图片、音频、视频等文件。字符流适合处理文本数据,如文本文件、配置文件、XML文件等。
正确答案:B
使用DataInputStream读取数据时,必须按照DataOutputStream写入数据的顺序来读取,因为数据是按二进制格式顺序存储的,读取顺序错误会导致数据解析错误。
正确答案:C
第1行创建FileInputStream时如果文件不存在会抛出FileNotFoundException(IOException的子类);第2行读取数据时可能因为I/O错误抛出IOException;第4行关闭流时也可能抛出IOException。第3行只是打印数据,不会抛出IOException。
正确答案:B
对于大文件复制,使用BufferedInputStream配合字节数组缓冲区效率最高。缓冲流减少了系统调用次数,字节数组缓冲区进一步提高了批量读写的效率。逐字节复制效率最低。
正确答案:B
ByteArrayInputStream的reset()方法将读取位置重置到流的开始位置(或之前mark()标记的位置),这样可以重新读取数据,而不需要重新创建流对象。
继续努力,加油!