详解Java中ByteArray字节数组的输入输出流的用法
什么是ByteArray字节数组?
在Java中,字节数组是指由若干个字节所组成的数组。字节一般是指8位二进制数,也就是一个范围在0-255的整数,因此Java中一个字节数组就是由一系列整数所组成的数组。
什么是Java中的输入输出流?
Java中的输入输出流是用来实现数据的流动,将数据从输入端流入程序,或者从程序输出到输出端。在Java中,分为字节流和字符流两种类型。其中字节流主要操作字节,字符流主要操作字符。
ByteArray输入输出流的用途
ByteArray输入输出流主要用于在内存中对字节数组进行操作,将字节数组中的数据读出或者写入。它并不是物理上的输入输出流,而是对字节数组进行操作的流。通常情况下,我们可以将ByteArray输入输出流和File输入输出流、Socket输入输出流等结合使用,便于快速读写数据。
ByteArray输入输出流的常用方法
ByteArrayInputStream的常用方法
public int read()
: 从输入流中读取下一个数据字节。public int read(byte b[], int off, int len)
: 从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。public int available()
: 返回可从此输入流中读取的字节数。public void close()
: 关闭此输入流并释放与该流关联的所有系统资源。public long skip(long n)
: 从输入流中跳过并丢弃n个字节数据。
ByteArrayOutputStream的常用方法
public void write(int b)
: 将指定的字节写入此输出流。public void write(byte b[], int off, int len)
: 将指定数组中从偏移量 off 开始的 len 个字节写入此输出流。public byte[] toByteArray()
: 创建一个新分配的字节数组,其大小是此输出流的当前大小,并且缓冲区的有效内容已复制到该数组中。public int size()
: 返回此输出流的当前大小。public void reset()
: 将此输出流重置为空状态。public void close()
: 关闭此输出流并释放与此流有关的所有系统资源。
ByteArray字节数组的输入输出流示例
接下来,我们使用ByteArrayInputStream、ByteArrayOutputStream与FileOutputStream结合的方式,演示一下如何从字节数组中读取数据并将数据写出到磁盘上。
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class ByteArrayIOTest {
public static void main(String[] args) {
// 将字符串转化为字节数组
byte[] data = "Hello World!".getBytes();
// 创建ByteArrayInputStream对象
ByteArrayInputStream bais = new ByteArrayInputStream(data);
// 创建ByteArrayOutputStream对象
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// 定义缓冲区
byte[] buffer = new byte[1024];
int len;
try {
// 读取ByteArrayInputStream,将数据写入ByteArrayOutputStream
while ((len = bais.read(buffer)) > -1) {
baos.write(buffer, 0, len);
}
// 将ByteArrayOutputStream中的数据写入FileOutputStream
FileOutputStream fos = new FileOutputStream("hello.txt");
baos.writeTo(fos);
fos.close();
// 打印结果
System.out.println(baos.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行后,会同时在控制台输出"Hello World!"以及在磁盘上生成一个名为hello.txt的文件。
再看一段将整型数组写入ByteArrayOutputStream,然后将该字节数组读入到ByteArrayInputStream中的Java代码示例。
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class ByteArrayTest {
public static void main(String[] args) throws IOException {
// 准备一个整型数组
int[] array = {1,2,3};
// 创建ByteArrayOutputStream对象
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// 将数组写入ByteArrayOutputStream
for (int i = 0; i < array.length; i++) {
baos.write(array[i]);
}
// 将ByteArrayOutputStream转换成ByteArrayInputStream
InputStream in = new ByteArrayInputStream(baos.toByteArray());
// 读取ByteArrayInputStream中的数据
int i = -1;
while((i = in.read())!= -1){
System.out.print(i+",");
}
// 关闭流
in.close();
baos.close();
}
}
程序运行的输出结果为"1,2,3,",证明了在将整型数组写入ByteArrayOutputStream后,从ByteArrayInputStream读取数据是可行的。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Java中ByteArray字节数组的输入输出流的用法 - Python技术站