Как Java внутренне преобразует любой тип файла (изображение, PDF и т. Д.) В байтовый массив? - PullRequest
0 голосов
/ 07 сентября 2018

В настоящее время я работаю над вводом-выводом Java, хотя он прост в работе и имеет дело с потоками байтов и символьными потоками. Мне было просто интересно, как java удается преобразовать любой тип файла (изображение, pdf и т. Д.) В его представление bytearray.

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Java не конвертирует файл в сам байтовый массив. Как @Toonijn упомянул , программа (Java или другой язык) выполняет системные вызовы для выборки байтов с диска, URL, памяти или другого источника. Все дело в том, как вы хотите посмотреть на байты; будь то изображение, несколько изображений, какой-то пользовательский файл, дамп потока или что-то еще.

Кроме того, в Java есть объекты, и объект может быть представлением для чего угодно : последовательность символов, поток, массив байтов, временный буфер, удаленный файл и т.д ... - что угодно. Например, вы знаете, что какой-то файл является изображением, поэтому вы можете просто рассматривать эти байты как изображение. Пример

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 файл является текстовым файлом с пользовательским расширением. Так же, как вы знаете, что такое содержимое файла, вы можете просто прочитать его .

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

То же самое относится к PDF . Все, что вам нужно, это добавить библиотеки (они могут быть написаны на Java или других языках; для этого потребуются некоторые хаки: python , C ++ , даже файл bash ) ,

Другой пример - excel file.

Workbook workbook = WorkbookFactory.create(new File("yourfile.xlsx"));

Обратите внимание, что если вы пытаетесь прочитать байты из файла и предполагаете, что это один тип, например, и изображение, но вы обрабатываете его как другой тип, например, Excel, то вы будете читать данные неправильно или даже получить ошибки.

0 голосов
/ 07 сентября 2018

Для компьютера файлы - это не что иное, как набор байтов (и некоторые метаданные, такие как имя, путь, данные ...) на диске.На самом деле не существует такого понятия, как «тип» файла.

Но что вообще означает 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) В редакторе вы увидите, что файл на самом деле является не чем иным, как байтами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...