如何在 Android 的 StringBuffer 中连接长字符串

How to concatenate long String in StringBuffer for Android

我在 StringBuffer 连接中遇到一个问题,即从 JSON 数组追加大字符串字符。 我的数据很大,它在正确迭代数组的 205 个索引后进入日志 但是当我从 JSONArray 追加 StringBuffer 或 StringBuilder 中的每一行 String 时,它只接收 4063 个字符而不追加 JSONArray 中存在的所有字符,但迭代不会中断并一直持续到完成204 行。

                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();
              } 

我的 JSON 数组在 205 中联系了 119797 个字符,在迭代后追加到 StringBuffer 中,我必须使用接受字符串进行解密的库对其进行解密。但是 StringBuffer 没有完整的 119797 个字符的数据。

异常是因为字符串不完整,我在下面附上 link 上的文件以供参考,还使用 ​​跨平台 CryptLib 使用 AES 256 进行加密 很容易找到在 Github

3 Files With Original and Logged text

不要使用 StringBuffer ,而是使用 StringBuilder ..这里有详细的解释


希望这对您有所帮助。 :)

编辑

这是我用来读取整个字符串的代码...

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

希望对您有所帮助!

编辑 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();