2015-04-15 51 views
0

我正在面對StringBuffer連接中的一個問題,用於從JSONArray中追加大字符的String。 我的數據是巨大的,並且它在迭代205個數組的索引後正好進入日誌 ,但是當我在StringBuffer或StringBuilder中追加每行的字符串時,它只接受4063個字符而不追加JSON中存在的所有字符數組但是迭代不會中斷,直到完成204行。如何在Android的StringBuffer中連接長字符串

   String outputFinal = null; 

       try { 

        StringBuilder cryptedString = new StringBuilder(1000000); 

        JSONObject object = new JSONObject(response); 

        JSONArray serverCustArr = object.getJSONArray("ServerData"); 

        Log.d("TAG", "SurverCust Arr "+serverCustArr.length()); 

        for (int i = 0; i < serverCustArr.length(); i++) { 

         String loclCryptStr = serverCustArr.getString(i); 

         Log.d("TAG", "Loop Count : "+i); 

         cryptedString.append(loclCryptStr); 
        } 

        Log.d("TAG", "Output :"+cryptedString.toString()); 


        CryptLib _crypt = new CryptLib(); 

        String key = this.preference.getEncryptionKey(); 

        String iv = this.preference.getEncryptionIV(); 

        outputFinal = _crypt.decrypt(cryptedString.toString(), key,iv); //decrypt 
        System.out.println("decrypted text=" + outputFinal); 

       } catch (Exception e) { 

       e.printStackTrace(); 
       } 

我JSONArray觸點205和迭代中的StringBuffer追加後119797個角色,我有一個庫取字符串解密解密。但是StringBuffer沒有119797個字符的完整數據。

和異常是因爲字符串是不完整的,我在下面的鏈接以供參考封裝文件,並使用跨平臺CryptLib使用AES 256加密在Github上很容易找到

3 Files With Original and Logged text

+2

我不明白。要麼我應該更好地理解,要麼你應該更好地解釋。 – wvdz

+0

嗯,我正在循環將我的JSON數組數據添加到解密庫中使用的StringBuffer,但我的StringBuffer堆溢出,只能添加4063字節,而不是原始的JSON數組遍歷。 – user366584

+0

你在問題中給出的描述很混亂,請清楚地提一下究竟是什麼問題? – Umair

回答

1

不使用StringBuffer,而不是使用StringBuilder ..這裏的詳細說明

http://stackoverflow.com/questions/11908665/max-size-for-string-buffer 

希望這有助於。 :)

編輯

這是我用來讀取整個字符串代碼...

public void parseLongString(String sourceFile, String path) { 
     String sourceString = ""; 
     try { 
      BufferedReader br = new BufferedReader(new FileReader(sourceFile)); 
      // use this for getting Keys Listing as Input 
      StringBuilder sb = new StringBuilder(); 
      String line = br.readLine(); 

      while (line != null) { 
       sb.append(line); 
       line = br.readLine(); 
      } 
      br.close(); 
      sourceString = sb.toString(); 
      sourceString = sourceString.toUpperCase(); 

      System.out.println(sourceString.length()); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     File file = new File(path); 
     FileWriter fileWriter = null; 
     BufferedWriter bufferFileWriter = null; 
     try { 
      fileWriter = new FileWriter(file, true); 
      bufferFileWriter = new BufferedWriter(fileWriter); 
     } catch (IOException e1) { 
      System.out.println(" IOException"); 
      e1.printStackTrace(); 
     } 
     try { 
      fileWriter.append(sourceString); 
      bufferFileWriter.close(); 
      fileWriter.close(); 
     } catch (IOException e) { 
      System.out.println("IOException"); 
      e.printStackTrace(); 
     } 

    } 

,這是輸出文件,其中我只是將其轉換爲大寫。

https://www.dropbox.com/s/yecq0wfeao672hu/RealTextCypher%20copy_replaced.txt?dl=0 

希望這有助於!

EDIT 2

如果妳還在尋找的東西..你也可以嘗試的StringWriter 語法將

StringWriter writer = new StringWriter(); 
     try { 
      IOUtils.copy(request.getInputStream(), writer, "UTF-8"); 
     } catch (IOException e2) { 
      // TODO Auto-generated catch block 
      e2.printStackTrace(); 
     } 
     String theString = writer.toString(); 
+0

不,它也沒有幫助:( – user366584

+0

你可以在這裏放置代碼片段嗎?與printstacktrace,這將有所幫助! –

+0

請找到PrintStack和記錄的文件,它們被放置在共享鏈接上更新的問題 – user366584