[英]Java — StringBuilder using String & not StringBuilder
[英]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.