मैं स्ट्रिंग के लिए अपनी bytearray परिवर्तित करने के लिए निम्न कोड का उपयोग करें:बाइटएरे से स्ट्रिंग में कनवर्ट करने में आउटऑफमेमरी अपवाद?
String sReturn = new String(byteArray, "UTF-8");
लेकिन जब bytearray काफी बड़ी है मैं निम्न अपवाद मिलता है।
क्या बाइटएरे से स्ट्रिंग को आउट ऑफ़ मेमोरी अपवाद के रूप में परिवर्तित करने का कोई अन्य तरीका है?
06-17 12:27:37.594: E/dalvikvm(1617): Out of memory: Heap Size=30663KB, Allocated=22087KB, Bitmap Size=936KB, Limit=32768KB
06-17 12:27:37.594: E/dalvikvm(1617): Extra info: Footprint=30663KB, Allowed Footprint=30663KB, Trimmed=616KB
06-17 12:27:37.594: W/dalvikvm(1617): threadid=9: thread exiting with uncaught exception (group=0x4001d648)
06-17 12:27:37.594: E/AndroidRuntime(1617): FATAL EXCEPTION: Thread-19
06-17 12:27:37.594: E/AndroidRuntime(1617): java.lang.OutOfMemoryError: (Heap Size=30663KB, Allocated=22087KB, Bitmap Size=936KB)
06-17 12:27:37.594: E/AndroidRuntime(1617): at java.lang.String.<init>(String.java:422)
06-17 12:27:37.594: E/AndroidRuntime(1617): at java.lang.String.<init>(String.java:276)
06-17 12:27:37.594: E/AndroidRuntime(1617): at org.mabna.order.utils.Utilities.decompress(Utilities.java:389)
06-17 12:27:37.594: E/AndroidRuntime(1617): at org.mabna.order.utils.WebserviceResponse.getClearedResponse(WebserviceResponse.java:18)
06-17 12:27:37.594: E/AndroidRuntime(1617): at org.mabna.order.businessLayer.BoWebService.getDataForUpdate(BoWebService.java:216)
06-17 12:27:37.594: E/AndroidRuntime(1617): at org.mabna.order.ui.ActToolDataExchange.threadGetDataForFullUpdate(ActToolDataExchange.java:389)
06-17 12:27:37.594: E/AndroidRuntime(1617): at org.mabna.order.ui.ActToolDataExchange.access$9(ActToolDataExchange.java:380)
06-17 12:27:37.594: E/AndroidRuntime(1617): at org.mabna.order.ui.ActToolDataExchange$35.run(ActToolDataExchange.java:639)
06-17 12:27:37.594: E/AndroidRuntime(1617): at org.mabna.order.utils.Utilities$4.run(Utilities.java:924)
अद्यतन
public static String decompress(String zipText) throws IOException {
byte[] compressed = Base64.decode(zipText);
if (compressed.length > 4) {
GZIPInputStream gzipInputStream = new GZIPInputStream(
new ByteArrayInputStream(compressed, 4,
compressed.length - 4));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
for (int value = 0; value != -1;) {
value = gzipInputStream.read();
if (value != -1) {
baos.write(value);
}
}
gzipInputStream.close();
baos.close();
byte[] byteArray = baos.toByteArray();
Log.i("toByteArray", String.valueOf(byteArray.length));
String sReturn = new String(byteArray, "UTF-8");
return sReturn;
} else {
return "";
}
}
public static String decrypt(String encrypted, String password)
throws Exception {
byte[] encrypteddata = Base64.decode(encrypted);
byte[] bytes = decrypt(encrypteddata, password);
String result = new String(bytes, "UTF-8");
return result;
}
public static byte[] decrypt(byte[] encrypted, String password)
throws Exception {
byte[] passwordKey = encodeDigest(password);
try {
aesCipher = Cipher.getInstance(CIPHER_TRANSFORMATION);
} catch (NoSuchAlgorithmException e) {
throw new Exception(
"Decryption Exception: No such algorithm\r\n" + e
.toString());
} catch (NoSuchPaddingException e) {
throw new Exception(
"Decryption Exception: No such padding PKCS5\r\n" + e
.toString());
}
secretKey = new SecretKeySpec(passwordKey, CIPHER_ALGORITHM);
try {
aesCipher.init(Cipher.DECRYPT_MODE, secretKey, ivParameterSpec);
} catch (InvalidKeyException e) {
throw new Exception(
"Decryption Exception: Invalid key\r\n" + e.toString());
} catch (InvalidAlgorithmParameterException e) {
throw new Exception(
"Decryption Exception: Invalid algorithm\r\n" + e
.toString());
}
byte[] encryptedData;
try {
encryptedData = aesCipher.doFinal(encrypted);
} catch (IllegalBlockSizeException e) {
throw new Exception(
"Decryption Exception: Illegal block size\r\n" + e
.toString());
} catch (BadPaddingException e) {
throw new Exception(
"Decryption Exception: Bad padding\r\n" + e
.toString());
}
return encryptedData;
}
क्या आकार स्ट्रिंग होगा (बेस 64 dcoding, साथ ही gzip विकोडक वहाँ srteaming जाता है) को यह पुनर्लेखन के लिए? यदि यह बहुत बड़ा है, तो क्या आप वाकई इसे एक स्ट्रिंग के रूप में रखना चाहते हैं? –
क्या आप बाइटएरे के आकार को जानते हैं जो अपवाद को फेंकने का कारण बनता है? रूपांतरण से पहले बाइटएरे के आकार की जांच करना संभव होगा और यदि इस महत्वपूर्ण आकार पर, छोटे चरणों में परिवर्तित हो सकता है? – Kerry
बाइटएरे का आकार 3663125 बाइट्स – breceivemail