java内部如何将任何类型的文件(图像,pdf等)转换为bytearray?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java内部如何将任何类型的文件(图像,pdf等)转换为bytearray?相关的知识,希望对你有一定的参考价值。

我目前正在研究Java I / O,虽然它易于工作并处理字节流和字符流。我只是想知道,java如何将任何类型的文件(图像,pdf等)转换为其bytearray表示。

答案

对于计算机而言,文件只不过是磁盘上的字节集合(以及名称,路径,数据......等一些元数据)。实际上没有文件的“类型”这样的东西。

但是pdf文件甚至比什​​么意思呢?嗯,这是一个惯例,我们说pdf文件的名称以'.pdf'(也称为扩展名)结尾,存储在此文件中的第一个字节是25 50 44 46(幻数https://en.wikipedia.org/wiki/List_of_file_signatures)。

更直接地回答您的问题:操作系统负责从磁盘读取文件。 Java只使用正确的系统调用。此调用在特定JVM中实现。

PS:如果你想自己调查一下,可以使用十六进制编辑器查看每个文件的字节。 (选择你最喜欢的:https://en.wikipedia.org/wiki/Comparison_of_hex_editors)在编辑器中你会看到一个文件实际上只不过是字节。

另一答案

Java不会将文件转换为字节数组本身。作为@Toonijn mentioned,程序(Java或其他语言)进行系统调用以从磁盘,URL,内存或其他源获取字节。这是关于你如何看待字节的全部内容;无论是图像,多个图像,某些自定义文件,线程转储还是其他任何内容。

此外,Java中有对象,对象可以是任何内容的表示:char序列,流,字节数组,临时缓冲区,远程文件等等 - 无论如何。例如,您知道某个文件是图像,因此您只需将这些字节视为图像即可。 Example

import java.awt.Image;
import java.io.File;
import java.io.IOException;

File image2 = new File("bishnu.jpg");
Image image = ImageIO.read(image2);

或者您知道某些some.data文件是具有自定义扩展名的文本文件。所以同样,你知道文件内容是什么,你可以just read it

String content = new String(Files.readAllBytes(Paths.get("some.data")));

关于qazxsw poi的同样的事情。你需要的只是添加库(它们可以用Java或其他语言编写;后者将记录一些黑客:qazxsw poi,qazxsw poi,qazxsw poi)。

另一个例子 - PDF文件。

python

请注意,如果您尝试从文件中读取字节,并假设它是一种类型(例如,图像),但您将其作为另一种类型(例如excel)处理,那么您将错误地读取数据,甚至得到错误。

以上是关于java内部如何将任何类型的文件(图像,pdf等)转换为bytearray?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 PDF 文件页面呈现为图像?

如何确保在生成 PDF 之前加载图像?

如何使用 php 将 .docx、xslx、img、txt 等任何文件转换为 PDF 预览?

如何使用给定的存储路径打开任何格式的文件

如何将html模板(带图像)转换为pdf?

在 DRUPAL 中验证 PDF 文件上传中的 MIME 类型