Перейти к содержимому

Как преобразовать массив байтов в файл

  • автор:

Практическое руководство. Преобразование массива байтов в строку в Visual Basic

В этом разделе показано, как преобразовать байты из массива байтов в строку.

Пример

В этом примере метод класса кодирования используется GetStringEncoding.Unicode для преобразования всех байтов массива байтов в строку.

Private Function UnicodeBytesToString( ByVal bytes() As Byte) As String Return System.Text.Encoding.Unicode.GetString(bytes) End Function 

Для преобразования массива байтов в строку можно выбрать один из нескольких вариантов кодирования:

  • Encoding.ASCII: получает кодировку для 7-разрядной кодировки ASCII.
  • Encoding.BigEndianUnicode: получает кодировку для формата UTF-16 с использованием порядка байтов с большим байтом.
  • Encoding.Default: возвращает кодировку для текущей кодовой страницы ANSI системы.
  • Encoding.Unicode: получает кодировку для формата UTF-16 с использованием порядка байтов с минимальным порядком байтов.
  • Encoding.UTF32: получает кодировку для формата UTF-32 с использованием порядка байтов с минимальным порядком байтов.
  • Encoding.UTF7: получает кодировку для формата UTF-7.
  • Encoding.UTF8: получает кодировку для формата UTF-8.

См. также раздел

  • System.Text.Encoding
  • GetString
  • Практическое руководство. Преобразование строки в массив байтов в Visual Basic

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Java — Как сохранить байт [] в файл

В этом примере Java показано, как прочитать файл в байтовый массив и сохранить байтовый массив обратно в новый файл с помощью классических try-catch-try-catch, JDK 7 try-resources и решения Java.NIO.

 package com.mkyong; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class ArrayOfBytesToFile < private static final String UPLOAD_FOLDER = "C:\temp\"; public static void main(String[] args) < FileInputStream fileInputStream = null; try < File file = new File("C:\temp\testing1.txt"); byte[] bFile = new byte[(int) file.length()]; // читать файл в байты [] fileInputStream = new FileInputStream(file); fileInputStream.read(bFile); // сохранить байты [] в файл writeBytesToFile(bFile, UPLOAD_FOLDER + "test1.txt"); writeBytesToFileClassic(bFile, UPLOAD_FOLDER + "test2.txt"); writeBytesToFileNio(bFile, UPLOAD_FOLDER + "test3.txt"); System.out.println("Done"); >catch (IOException e) < e.printStackTrace(); >finally < if (fileInputStream != null) < try < fileInputStream.close(); >catch (IOException e) < e.printStackTrace(); >> > > // Classic, catch (IOException e) < e.printStackTrace(); >finally < if (fileOuputStream != null) < try < fileOuputStream.close(); >catch (IOException e) < e.printStackTrace(); >> > > // Начиная с JDK 7 - попробуйте ресурсы private static void writeBytesToFile(byte[] bFile, String fileDest) < try (FileOutputStream fileOuputStream = new FileOutputStream(fileDest)) < fileOuputStream.write(bFile); >catch (IOException e) < e.printStackTrace(); >> // Начиная с JDK 7, NIO private static void writeBytesToFileNio(byte[] bFile, String fileDest) < try < Path path = Paths.get(fileDest); Files.write(path, bFile); >catch (IOException e) < e.printStackTrace(); >> > 

Рекомендации

  1. Как преобразовать файл в массив байтов
  2. Файлы JavaDoc
  3. FileOutputStream JavaDoc

ЧИТАТЬ ТАКЖЕ: Как переопределить PrimeFaces CSS?

Как перевести файл в массив байтов

Как перевести файл в массив байтов и наоборот? Файлом может быть MS Word и Excel или что-то другое. Также и строку.

Отслеживать
user177221
задан 7 сен 2015 в 3:48
Aslan Kussein Aslan Kussein
1,776 2 2 золотых знака 14 14 серебряных знаков 35 35 бронзовых знаков

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

byte[] array = Files.readAllBytes(Paths.get(fileName)); 

Отслеживать
5,509 16 16 серебряных знаков 42 42 бронзовых знака
ответ дан 7 сен 2015 в 7:33
465 3 3 серебряных знака 13 13 бронзовых знаков

byte[] fileInArray = new byte[(int)file.length()]; FileInputStream f = new FileInputStream(""); f.read(fileInArray); 

Это без использования всякого рода сторонних библиотек. Средствами java.

Отслеживать
ответ дан 7 сен 2015 в 4:18
Виталий Вихляев Виталий Вихляев
891 15 15 серебряных знаков 34 34 бронзовых знака

\я вот если я пытаюсь из джава класса сделать массив байтов и какой метод мне использовать не знаете?

7 сен 2015 в 4:28

@Aslan Kussein с файлами .java точно так же. Если же вам нужно в массив байтов преобразовать объект какого-то класса , то вам необходимо его сериализовать. Очень хороший ресурс на эту тему здесь

7 сен 2015 в 4:56

А вы документацию к InputStream.read читали? Там вообще-то написано «Reads some number of bytes from the input stream and stores them into the buffer array b». А вы даже возвращаемое значение не проверяете. Чтение может прерваться в произвольный момент, и вы никак не узнаете, сколько байт считано по факту.

7 сен 2015 в 6:20

@Tagir Valeev никто не мешает обработать ошибку при чтении. Насчет контроля количества считанных байт согласен- в моем способе его нет (а может и не нужен). И все же. Как вы решали бы эту проблему, при использовании java более взрослых версий?

7 сен 2015 в 7:10

Вообще, вероятно, лучше memory-mapping сделать. Это будет быстрее. Если без мемори-мэппинга — воспользовался бы библиотекой или написал бы вручную примерно то же самое, что в readAllBytes .

Как преобразовать массив байт в любой тип?

mindtester

Спасибо. После сдачи проекта займусь изучением.
По задумке вместо (byte) я хотел подставлять любой тип с помощью шаблонной функции, но тут, как я понял, это невозможно.

object хранит массив, его вообще возможно преобразовать в тип T?

Изначально метод выгладил так

public T Get() < if (dataByteArray == null) < return default(T); >var formatter = new BinaryFormatter(); using (var stream = new MemoryStream(dataByteArray)) < object obj = formatter.Deserialize(stream); return (T)obj; >>

mindtester

# @mindtester Куратор тега C#

После сдачи проекта займусь изучением.

как вы верно догадались, частенько, ответ находится путем эксперементальных проверок )).. если найдете способ мотивировать — я проделаю это за вас ))

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *