При использовании Set-Content
вместо Out-File
вы можете указать кодировку Byte
, которая может использоваться для записи массива байтов в файл. Это в сочетании с пользовательской кодировкой UTF8, которая не испускает спецификацию, дает желаемый результат:
# This variable can be reused
$utf8 = New-Object System.Text.UTF8Encoding $false
$MyFile = Get-Content $MyPath -Raw
Set-Content -Value $utf8.GetBytes($MyFile) -Encoding Byte -Path $MyPath
. Разница в использовании [IO.File]::WriteAllLines()
или аналогичной заключается в том, что она должна работать нормально с любым типом элемента и путь, а не только фактические пути к файлам.
Вы можете использовать Apache Commons IO для решения этой и подобных задач.
Тип IOUtils
имеет статический метод для чтения ] InputStream
и вернуть байт []
.
InputStream is;
byte[] bytes = IOUtils.toByteArray(is);
Внутренне это создает ByteArrayOutputStream
и копирует байты в вывод, затем вызывает toByteArray ()
. Он обрабатывает большие файлы, копируя байты блоками по 4 КиБ.
public static byte[] getBytesFromInputStream(InputStream is) throws IOException {
ByteArrayOutputStream os = new ByteArrayOutputStream();
byte[] buffer = new byte[0xFFFF];
for (int len = is.read(buffer); len != -1; len = is.read(buffer)) {
os.write(buffer, 0, len);
}
return os.toByteArray();
}
Если вы используете Google Guava , это будет так же просто, как:
byte[] bytes = ByteStreams.toByteArray(inputStream);
Наконец, через двадцать лет, существует простое решение без необходимости использования сторонней библиотеки, благодаря Java 9 :
InputStream is;
…
byte[] array = is.readAllBytes();
Обратите внимание также на удобные методы readNBytes(byte[] b, int off, int len)
и transferTo(OutputStream)
для удовлетворения повторяющихся потребностей.
Острота Kotlin без сторонних зависимостей:
var arr: ByteArray = stream.bufferedReader().use(BufferedReader::readText).toByteArray()
(я понимаю, вопрос о Java, но многие люди смешивают и соответствуют ему Kotlin в эти дни.)
Вам необходимо прочитать каждый байт из вашего InputStream
и записать его в ByteArrayOutputStream
. Затем вы можете получить базовый массив байтов, вызвав toByteArray ()
; например,
InputStream is = ...
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[16384];
while ((nRead = is.read(data, 0, data.length)) != -1) {
buffer.write(data, 0, nRead);
}
return buffer.toByteArray();
You ' Вам нужно будет вернуть несколько частей информации для вашего ответа. К счастью, вы можете легко сделать это с помощью JSON, и jQuery автоматически обработает его за вас, если вы укажете тип ответа json. Объект, который вы добавляете в свою функцию обратного вызова ajax, будет содержать все необходимые вам фрагменты данных в виде различных свойств.
Я бы посоветовал выработать привычку возвращать код состояния «успех» или «сбой» при каждом вызове ajax. , и набор ошибок с ним. См. Эту замечательную запись в блоге для получения дополнительной информации о том, что я имею в виду.
Причина этого в том, что вызов ajax всегда в основном "успешен", если только сервер действительно не может обработать запрос и не вернет код состояния HTTP сбоя. Если результат запроса похож на ошибку проверки,
этот объект, чтобы получить рекомендованный
прямоугольники рамки для вашего
который вы можете найти в пакете javax.imageio
. Вы можете прочитать изображение из файла, используя всего одну строку кода:
BufferedImage image = ImageIO.read(new File("image.jpg"));
Это даст вам BufferedImage
, а не байт []
. Чтобы получить данные изображения, вы можете вызвать getRaster ()
в BufferedImage
. Это даст вам объект Raster
, у которого есть методы для доступа к данным пикселей (у него есть несколько методов getPixel ()
/ getPixels ()
).
Найдите в документации API для javax.imageio.ImageIO
, java.awt.image.BufferedImage
, java.awt.image.Raster
и т. Д.
ImageIO по умолчанию поддерживает ряд форматов изображений: JPEG, PNG, BMP, WBMP и GIF. Можно добавить поддержку большего количества форматов (вы d требуется подключаемый модуль, реализующий интерфейс поставщика услуг ImageIO).
См. также следующий учебник: Работа с изображениями
Input Stream is ...
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int next = in.read();
while (next > -1) {
bos.write(next);
next = in.read();
}
bos.flush();
byte[] result = bos.toByteArray();
bos.close();
Коды ниже
public static byte[] serializeObj(Object obj) throws IOException {
ByteArrayOutputStream baOStream = new ByteArrayOutputStream();
ObjectOutputStream objOStream = new ObjectOutputStream(baOStream);
objOStream.writeObject(obj);
objOStream.flush();
objOStream.close();
return baOStream.toByteArray();
}
ИЛИ
BufferedImage img = ...
ByteArrayOutputStream baos = new ByteArrayOutputStream(1000);
ImageIO.write(img, "jpeg", baos);
baos.flush();
byte[] result = baos.toByteArray();
baos.close();