21xrx.com
2024-09-19 08:17:18 Thursday
登录
文章检索 我的文章 写文章
Java实现文件转换成二进制流及应用案例
2023-06-15 17:30:54 深夜i     --     --
Java 文件转换 二进制流 FileInputStream ByteArrayOutputStream Java

在Java编程中,文件转换成二进制流是一个常见操作。Java提供了多种方式来实现文件转换成二进制流的功能,例如使用FileInputStream与ByteArrayOutputStream类,或者使用Java的NIO(New IO)类库中的ByteBuffer类。下面我们将详细介绍Java实现文件转换成二进制流的两种方法以及应用实例。

一、使用FileInputStream与ByteArrayOutputStream类

使用FileInputStream与ByteArrayOutputStream类实现文件转换成二进制流是比较传统的方法。具体实现代码如下:


File file = new File("example.txt");

ByteArrayOutputStream bos = new ByteArrayOutputStream((int) file.length());

FileInputStream fis = new FileInputStream(file);

byte[] buffer = new byte[1024];

int len;

while ((len = fis.read(buffer)) != -1) {

  bos.write(buffer, 0, len);

}

byte[] fileByteArray = bos.toByteArray();

在以上代码中,我们传入文件名example.txt并创建File对象。然后创建一个ByteArrayOutputStream对象,它可以暂存数据流。然后使用FileInputStream类读取文件,使用ByteArrayOutputStream类将数据流中的数据写入内存中的字节数组中。最后得到的fileByteArray即是文件的二进制流。需要注意的是,在读取文件时,通常要使用循环来避免读取数据不完整的问题。

二、使用Java NIO的ByteBuffer类

Java NIO是Java标准库中新的I/O(input/output)API。相比于传统的Java I/O,Java NIO提供了更快和更灵活的I/O操作,提高了系统的后台处理性能。Java NIO的ByteBuffer类则用于使用字节缓冲区读写数据。

下面是Java NIO的ByteBuffer类实现文件转换成二进制流的代码:


FileChannel channel = new FileInputStream("example.txt").getChannel();

ByteArrayOutputStream bos = new ByteArrayOutputStream();

ByteBuffer byteBuffer = ByteBuffer.allocate(1024);

while (channel.read(byteBuffer) > 0) {

  byteBuffer.flip();

  while (byteBuffer.hasRemaining()) {

    bos.write(byteBuffer.get());

  }

  byteBuffer.clear();

}

byte[] fileByteArray = bos.toByteArray();

我们通过Java NIO提供的FileChannel类,直接将文件的数据读取到ByteBuffer中,然后再使用ByteArrayOutputStream来将ByteBuffer中的数据读取出来,并以字节数组的形式保存。需要注意的是,在使用ByteBuffer中,必须先调用flip()方法,将ByteBuffer中的指针置为0,然后再读取数据。

三、应用实例

文件转换成二进制流在Java编程中非常常见。例如,在网络编程中,经常需要将文件转换成二进制流上传到服务器;在安全编程中,也会使用文件转换成二进制来加密文件。下面我们演示一个简单的应用场景:将图片转换成二进制流。


File file = new File("example.png");

InputStream inputStream = new FileInputStream(file);

byte[] fileByteArray = new byte[inputStream.available()];

inputStream.read(fileByteArray);

inputStream.close();

String fileType = "png";

String base64Image = Base64.getEncoder().encodeToString(fileByteArray);

String imageSrc = "data:image/" + fileType + ";base64," + base64Image;

System.out.println(imageSrc);

在以上代码中,我们传入图片文件名example.png并创建File对象。然后创建一个InputStream流,并读取输入流中的数据,并以字节数组的形式保存。接着调用Java的Base64类的getEncoder()方法将字节数组转换成base64字符串。最后将base64字符串格式化为HTML中的image data URI,并输出到控制台中。通过这样的方式,我们可以将图片转换成二进制流,并在HTML中以image类型展示它。

四、关键词

Java、文件转换、二进制流、FileInputStream、ByteArrayOutputStream、Java NIO、ByteBuffer、应用实例、Base64、image data URI。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复