2012-05-15 4 views
0

Я попытался преобразовать массив байтов в шестнадцатеричную строку. Но в итоге я исключаю исключение из памяти. Я не имел ни малейшего представления об этом.Как решить проблему нехватки памяти в android?

 private String byteArrayToHexString(byte[] array) { 
     StringBuffer hexString = new StringBuffer(); 
     for (byte b : array) { 
      int intVal = b & 0xff; 
      if (intVal < 0x10) 
      hexString.append("0"); 
      hexString.append(Integer.toHexString(intVal)); 
     } 
     return hexString.toString(); 

Спасибо за вашу помощь ребята

+0

Насколько велик ваш массив байтов? ;) (обратите внимание: зачем вам b & 0xff? байт не может быть больше 0xff) –

+0

Привет, спасибо за ваш комментарий, это мой размер изображения 15980544, bytearray size = 1489960 – GoCrazy

+0

@Adriano - это делается для того, чтобы получить подписанный материал справа – ligi

ответ

0

Вот пример. Сначала вы хотите сначала установить соединение с веб-сервером, а затем преобразовать изображение в шестую строку непосредственно в выходной поток, чтобы байты переходили непосредственно на сервер, и вам не нужно сначала преобразовывать все изображение в гигантскую строку, а затем нажмите на сервер.

byte[] array; // This is your byte array containing the image 
URL url = new URL("http://yourwebserver.com/image-upload-or-whatever"); 
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
try { 
    urlConnection.setDoOutput(true); 
    urlConnection.setChunkedStreamingMode(0); 

    OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream()); 
    // Now you have an output stream that is connected to the webserver that you can 
    // write the content into 
    for (byte b : array) { 
     // Get the ASCII character for the first and second digits of the byte 
     int firstDigit = ((b >> 4) & 0xF) + '0'; 
     int nextDigit = (b & 0xF) + '0'; 
     out.write(firstDigit); 
     out.write(nextDigit); 
    } 
    out.flush(); // ensure all data in the stream is sent 
    InputStream in = new BufferedInputStream(urlConnection.getInputStream()); 
    readStream(in); // Read any response 
} finally { 
    urlConnection.disconnect(); 
} 

Я не пробовал этот код, но, надеюсь, вы поняли.

+0

Спасибо за ответ ... но я отправляю некоторые другие параметры с этим .. вот что мне нужно преобразовать. – GoCrazy

+0

Вы также можете публиковать другие параметры. Просто, когда вы доберетесь до места, где должно быть отправлено изображение, вы можете сделать это так. В противном случае вам будет трудно это сделать. Ваш массив байтов составляет 1,5 МБ, когда вы конвертируете его в hexstring, у вас есть String, размер которого равен 3 МБ. –

+0

Ya, но дело в стороне сервера, они были закодированы так, что будут принимать только шестую строку – GoCrazy

0

не преобразовывают перед отправкой - преобразовать во время отправки

Смежные вопросы