Я делю файл на куски, и каждый кусок кодируется в Base64.Но я получаю ошибку OutOfMemory на encodeToString
.Мой код выглядит следующим образом:
try {
in = new FileInputStream(zipEntity.zip_file);
long bytesLeft = in.available();
long chunkOffset = 0;
int i = 0;
while (bytesLeft > 0) {
i++;
// TODO: what happens if int MAX_VALUE exceeded?
long maxChunkSize = chunkSizeBytes > 0 ? chunkSizeBytes : bytesLeft;
byte[] buffer = new byte[(int) Math.min(bytesLeft, maxChunkSize)];
int read = in.read(buffer, 0, buffer.length);
bytesLeft -= read;
Log.e("", "===== " + i + ", BYTES LEFT === " + bytesLeft);
boolean isLast = bytesLeft == 0;
chunks.add(new FileChunkEntity(Base64.encodeToString(buffer, Base64.DEFAULT), chunkOffset + "", isLast));
i++;
chunkOffset += buffer.length;
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (in != null)
try {
in.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
Я получаю сообщение об ошибке в этой строке:
chunks.add(new FileChunkEntity(Base64.encodeToString(buffer, Base64.DEFAULT), chunkOffset + "", isLast));
Я пробовал то же самое с Base64OutputStream
, но строка, полученная из Base64.encodeToString
, являетсяне соответствует outputStream.toString
.
Когда я попытался outputStream.toByteArray)
, у меня не вышло из-за ошибки памяти, но new String(outputStream.toByteArray)
не совпало с Base64.encodeToString()