字符/字节数组

在java中常用字节和字符数组在应用中临时存储数据。而这些数组又是通常的数据读取来源或者写入目的地。

如果你需要在程序运行时需要大量读取文件里的内容,那么你也可以把一个文件加载到数组中。

当然你可以通过直接指定索引来读取这些数组。但如果设计成为从InputStream或者Reader,而不是从数组中读取某些数据的话,你会用什么组件呢?

读取

要使这样的组件从数组中读取数据,您必须将字节或char数组包装在ByteArrayInputStream或CharArrayReader中。

这样,数组中可用的字节或字符就可以通过包装流或阅读器读取。

@Test
public void readByteArrayTest() throws IOException {
    //write data into byte array...
    byte[] bytes = "hello byte array!".getBytes();
    InputStream input = new ByteArrayInputStream(bytes);

    //read first byte
    int data = input.read();
    while(data != -1) {
        //do something with data
        System.out.print((char)data);
        //read next byte
        data = input.read();
    }
}

写入

同样,也可以把数据写到ByteArrayOutputStream或者CharArrayWriter中。

你只需要创建ByteArrayOutputStream或者CharArrayWriter,把数据写入,就像写其它的流一样。

当所有的数据都写进去了以后,只要调用 toByteArray() 或者 toCharArray(),所有写入的数据就会以数组的形式返回。

@Test
public void writeByteArrayTest() throws IOException {
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    output.write("This text is converted to bytes".getBytes("UTF-8"));
    byte[] bytes = output.toByteArray();
}

参考资料

http://ifeve.com/java-io-array/