Android конвертирует строку в байт [] - берет байт [] на куски - PullRequest
3 голосов
/ 18 октября 2011

У меня есть маленький вопрос. Как я могу получить byte array по частям и сохранить как String. Я имею в виду, если массив байтов слишком велик, как я могу создать несколько строк из него. Например, в первый раз я получаю только 50 бит / символ байта, во второй раз следующие 50 и т. Д. Есть идеи?

Ответы [ 3 ]

6 голосов
/ 18 октября 2011

Использовать String.getBytes() метод.

1 голос
/ 18 октября 2011

Если вам нужно создать строку, вам потребуется в несколько раз больше памяти, чем размер всех байтов.

Во-первых, строка - это массив символов, символ имеет размер 2 байта.

Во-вторых, String является неизменным объектом, поэтому его невозможно создать с использованием существующего массива, поэтому для его создания будет создана вторая копия массива символов.Если потребление памяти имеет жизненно важное значение, рассмотрите возможность использования CharSequence вместо String.

Наконец, используйте StringBuilder или StringWriter, например:

String writer = new StringWriter();
writer.write(new String(byteArrayChunk1, "UTF-8"));
...
writer.write(new String(byteArrayChunkN, "UTF-8"));
String resultString = writer.toString();

ОБНОВЛЕНИЕ : Еще один вариант, гораздо лучше, я думаю:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.write(byteArrayChunk1);
baos.write(byteArrayChunkN);
String resultString = baos.toString("UTF-8");
0 голосов
/ 18 октября 2011

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

byte[] origBytes = ...;
//a loop for splitting bytes
byte[] splittedBytes1 = ...;
byte[] splittedBytes2 = ...;
...
String strbytes1 = Base64.encodeBytes(splittedBytes1);
String strbytes2 = Base64.encodeBytes(splittedBytes2);
...
...