簡體   English   中英

Java StringBuilder / 字符串是 &#39;<Unreadable> &#39;

[英]Java StringBuilder / String is '<Unreadable>'

我有一個字節數組bytes的 UTF-8 編碼字符串,我想將其轉換為字符串。 bytes.length 約為 130000

String str = new String(bytes, StandardCharsets.UTF_8); 應該做的工作。 然而 str 得到值 '<Unreadable>'

逐行轉換字節並打印出來效果很好。 但是,在 StringBuilder 中添加行也會失敗。 同樣,StringBuilder r 的內容將是“<Unreadable>”。 所以我認為數組中可能有一個不可讀的字節。 但是r.substring(60000, r.count)效果很好, r.substring(1,60000)也是。 字節數組的大小有問題嗎? String/StringBuilder 的最大大小是 2^32 - 1 所以應該沒有問題。

      ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
      InputStreamReader reader = new InputStreamReader(bais);
      BufferedReader in = new BufferedReader(reader);
      // String readBuf = in.lines().collect(Collectors.joining()); gives '<Unreadable>'           
      String readed;
      StringBuilder r = new StringBuilder();
      while ((readed = in. readLine()) != null) {
          System.out.println(readed); // works fine
          r=r.append(readed);
      }

循環后 r.toString() is '<Unreadable>' 為什么我不能將字節數組轉換為 String/StringBuilder?

我有完全一樣的。 如果字符串由大於 50000 字節的文件制成,則該字符串為"<Unreadable>" 但是String.lenght()顯示 50000+ 字節! 我發現文本"<Unreadable">在調試工具中返回了 IDE (Netbeans 11)。 所以,字符串沒問題,但 Netbeans 沒有顯示正確的內容。 它改為顯示"<Unreadable>"

我試圖重現這種行為,但我無法做到。 我們需要一個適當的最小可重現示例來在這方面取得任何實際進展。 以及 Java 版本和供應商的完整詳細信息,以及可能涉及的任何其他工具。

但是,我確實有一件明確的事情要報告。 我有 Java 6、7、8、11 和 17 的 OpenJDK 源代碼的可搜索形式的副本。 當我搜索Unreadable的源代碼時,我得到的所有命中都沒有相關性。 (實際上,它們都在各自的test樹中!)這很奇怪。

我的初步結論是,您看到的這個<Unreadable>字符串不是來自 OpenJDK / Oracle Java。 您正在使用不同供應商的 Java,或者它來自諸如您的 IDE 之類的工具。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM