本文是在Java IO: Byte & Char Arrays翻译而来。欢迎大家联系我,跟我一起交流。本人水平有限,如果错误欢迎指正。
字节数组和字符数组在应用内部经常用来暂时地存储数据。这些数组也是典型的数据的输入源和输出目标。如果在程序运行时,同时需要大量访问文件的内容,你可能更喜欢以数组加载文件。当然你可以通过索引直接访问数组。但是如果你设计了一个组件用于从输入流(InputStream)或阅读器(Reader)读取特定的数据,而不是从数组读取数据,那该怎么办呢?
从输入流或阅读器读取数组
为了造这样的一个从数组读取数据的组件,你得把字节或字符用字节数组输入流或字符数组输入流包起来。这样数组形式的字节或字符能通过包装流或阅读器读取。
一个例子如下:
byte[] bytes = new byte[1024];
//write data into byte array...
InputStream input = new ByteArrayInputStream(bytes);
//read first byte
int data = input.read();
while(data != -1) {
//do something with data
//read next byte
data = input.read();
}
对于字节数组的读取也是类似于上面的例子,只要将字符包装成字节阅读器(CharArrayReader),然后就可以执行了。
通过输出流或写入数组
也可以把数据写入字节数组输出流(ByteArrayOutputStream)或字符写入器(CharArrayWriter)。你需要做的就是建立节数组输出流或字符写入器,然后向它写入数据,只需调用toByteArray()或toCharArray()方法,然后写入的数据将以数组形式返回。
例子如下:
ByteArrayOutputStream output = new ByteArrayOutputStream();
output.write("This text is converted to bytes".getBytes("UTF-8"));
byte[] bytes = output.toByteArray();
对于字节数组的写入也是类似于上面的例子,只要将字符包装成字节写入器(CharArrayWriter),然后就可以执行了。