面试题答案
一键面试使用方式
- 字节数组:在Java I/O中,字节数组通常作为参数传递给输入输出流的读写方法。例如,
InputStream
的read(byte[] b)
方法将数据读入字节数组b
,OutputStream
的write(byte[] b)
方法将字节数组b
的数据写出。它是一种较为简单直接的数据载体,使用时需要手动管理数组的索引、大小等。 - 缓冲区(Buffer):在Java NIO中,缓冲区是核心概念之一。使用时,首先通过
allocate
等方法创建缓冲区对象,如ByteBuffer buffer = ByteBuffer.allocate(1024);
。然后数据的读写是基于缓冲区的位置(position)、容量(capacity)和界限(limit)等属性进行操作。通过调用put
和get
方法进行数据的存入和取出,且需要调用flip
等方法来切换读写模式,使用相对复杂但更灵活。
数据操作
- 字节数组:对字节数组中的数据操作较为底层和直接。比如要读取特定位置的数据,直接通过数组索引访问。写入数据时,也是直接覆盖或填充数组元素。如果需要处理数据的类型转换等,需开发者自行实现复杂的逻辑。
- 缓冲区(Buffer):缓冲区提供了更丰富的数据操作方法。除了基本的字节读写,还支持不同数据类型(如
int
、float
等)的读写,通过不同的put
和get
重载方法实现。缓冲区还支持标记(mark)和重置(reset)等功能,方便在数据处理过程中灵活定位和回溯。同时,NIO的缓冲区支持直接内存访问(Direct Buffer),在某些场景下能提高I/O性能,而字节数组没有此特性。