ByteArrayInputStream是字节数组输入流。它继承于InputStream。它包含一个内部缓冲区,该缓冲区包含从流中读取的字节;通俗点说,它的内部缓冲区就是一个字节数组,而ByteArrayInputStream本质就是通过字节数组来实现的。
ByteArrayInputStream 的内部额外的定义了一个计数器,它被用来跟踪 read() 方法要读取的下一个字节。
关闭 ByteArrayInputStream 无效。此类中的方法在关闭此流后仍可被调用,而不会产生任何 IOException。
例子:
public static void main(String[] args) throws Exception{
String tempStr="ASDASXXAS";
ByteArrayInputStream byteArrayInputStream=new ByteArrayInputStream(tempStr.getBytes());
ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
int temp;
while ((temp=byteArrayInputStream.read())!=-1){
char c= (char) temp;
byteArrayOutputStream.write(Character.toLowerCase(c));
}
byteArrayInputStream.close();
byteArrayOutputStream.close();
System.out.println(byteArrayOutputStream.toString());
}
ByteArrayOutputStream 是字节数组输出流。它继承于OutputStream。
ByteArrayOutputStream 中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() 和 toString() 获取数据。
例子:
private static void test2() throws IOException {
String tempStr = "ASDASXXAS";
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(tempStr.getBytes());
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
int temp;
while ((temp = byteArrayInputStream.read()) != -1) {
char c = (char) temp;
byteArrayOutputStream.write(Character.toLowerCase(c));
}
byteArrayInputStream.close();
byteArrayOutputStream.close();
System.out.println(byteArrayOutputStream.toString());
// 计算长度
int size = byteArrayOutputStream.size();
System.out.printf("size=%s\n", size);
// 转换成byte[]数组
byte[] buf = byteArrayOutputStream.toByteArray();
String str = new String(buf);
System.out.printf("str=%s\n", str);
// 转换成byte[]数组
String str2 = byteArrayOutputStream.toString();
System.out.printf("byteArrayOutputStream=%s\n", str2);
// 将byteArrayOutputStream写入到另一个输出流baos中
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byteArrayOutputStream.writeTo(baos);
System.out.printf("baos=%s\n", baos);
} catch (IOException e) {
e.printStackTrace();
}
}