Недостаточно памяти при кодировании в Base64 - PullRequest
0 голосов
/ 19 ноября 2018

Я делю файл на куски, и каждый кусок кодируется в 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()

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