簡體   English   中英

Java:System.out.println 方法在打印字節數組時丟失了一些行

[英]Java:System.out.println method lost some lines when prints bytes array

我有一個字節數組,然后我通過字節數組創建一個新字符串,當我調試和評估字符串時,值是正確的。但是在我打印出來之后,它丟失了一些行。

    byte[] bytes = {50, 48, 49, 57, 45, 49, 48, 45, 50, 50, 32, 49, 55, 58, 52, 56, 58, 48, 52, 44, 51, 53, 56, 32, 73, 78, 70, 79, 32, 91, 104, 116, 116, 112, 45, 110, 105, 111, 45, 56, 48, 56, 53, 45, 101, 120, 101, 99, 45, 49, 93, 40, 69, 120, 101, 99, 117, 116, 101, 67, 111, 109, 109, 97, 110, 100, 46, 106, 97, 118, 97, 58, 54, 48, 41, 45, 32, 76, 97, 115, 116, 32, 108, 111, 103, 105, 110, 58, 32, 84, 117, 101, 32, 79, 99, 116, 32, 50, 50, 32, 49, 55, 58, 51, 56, 58, 51, 55, 32, 50, 48, 49, 57, 32, 102, 114, 111, 109, 32, 49, 48, 46, 50, 53, 51, 46, 55, 46, 50, 54, 13, 13, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 95, 13, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 95, 41, 13, 10, 32, 32, 95, 32, 32, 32, 95, 32, 95, 32, 95, 95, 32, 32, 95, 32, 32, 95, 95, 95, 32, 95, 95, 95, 32, 32, 95, 32, 95, 95, 32, 95, 95, 95, 13, 10, 32, 124, 32, 124, 32, 124, 32, 124, 32, 39, 95, 32, 92, 124, 32, 124, 47, 32, 95, 95, 47, 32, 95, 32, 92, 124, 32, 39, 95, 32, 96, 32, 95, 32, 92, 13, 10, 32, 124, 32, 124, 95, 124, 32, 124, 32, 124, 32, 124, 32, 124, 32, 124, 32, 40, 95, 124, 32, 40, 95, 41, 32, 124, 32, 124, 32, 124, 32, 124, 32, 124, 32, 124, 13, 10, 32, 32, 92, 95, 95, 44, 95, 124, 95, 124, 32, 124, 95, 124, 95, 124, 92, 95, 95, 95, 92, 95, 95, 95, 47, 124, 95, 124, 32, 124, 95, 124, 32, 124, 95, 124, 13, 10, 13, 10, 13, 10, 91, 122, 97, 105, 98, 101, 105, 64, 48, 49, 108, 49, 53, 98, 48, 48, 51, 32, 126, 93, 36, 32, 115, 115, 104, 32, 114, 111, 111, 116, 64, 49, 48, 46, 50, 51, 56, 46, 48, 46, 53, 52, 13, 10, 114, 111, 111, 116, 64, 49, 48, 46, 50, 51, 56, 46, 48, 46, 53, 52, 39, 115, 32, 112, 97, 115, 115, 119, 111, 114, 100, 58, 32, 13, 10, 76, 97, 115, 116, 32, 108, 111, 103, 105, 110, 58, 32, 84, 117, 101, 32, 79, 99, 116, 32, 50, 50, 32, 49, 54, 58, 53, 57, 58, 51, 48, 32, 50, 48, 49, 57, 32, 102, 114, 111, 109, 32, 49, 48, 46, 49, 55, 50, 46, 52, 57, 46, 49, 13, 13, 10, 91, 114, 111, 111, 116, 64, 122, 98, 110, 98, 117, 109, 97, 115, 117, 97, 116, 32, 126, 93, 35, 32, 98, 112, 114, 101, 115, 116, 111, 114, 101, 32, 45, 115, 32, 50, 48, 49, 57, 45, 49, 48, 45, 50, 50, 32, 49, 52, 58, 49, 48, 58, 53, 53, 32, 45, 101, 32, 50, 48, 49, 57, 45, 49, 48, 45, 50, 50, 32, 49, 52, 58, 49, 48, 58, 53, 53, 32, 45, 67, 32, 13, 32, 109, 97, 115, 116, 101, 114, 49, 32, 45, 68, 32, 109, 97, 115, 116, 101, 114, 49, 32, 47, 101, 116, 99, 47, 104, 111, 115, 116, 115, 13, 10, 91, 114, 111, 111, 116, 64, 122, 98, 110, 98, 117, 109, 97, 115, 117, 97, 116, 32, 126, 93, 35, 13, 10};
        String s = new String(bytes,"UTF-8");
        System.out.println(s);

當我調試和評估字符串 s 時,它包含:

[root@zbnbumasuat ~]# bprestore -s 2019-10-22 14:10:55 -e 2019-10-22 14:10:55 -C
master1 -D master1 /etc/hosts

但是當我打印出來它丟失了行並且只得到下面的結果:

master1 -D master1 /etc/hosts

所以任何人都可以幫我弄清楚發生了什么,這是jdk的錯誤嗎?

我的 jdk 版本是

java 版本“1.8.0_161”Java(TM) SE 運行時環境(內部版本 1.8.0_161-b12) Java HotSpot(TM) 64 位服務器 1 虛擬機(內部版本 25.161-b)

我讓我的朋友運行代碼,他得到了相同的結果。 當我在一些在線 java 工具中運行時,結果還可以。

“新行”應該是

\r   (Mac) 
\n   (Linux) 
\r\n (Windows)

因為您不是使用 Mac,如果控制台遇到獨立的 \r,它會將 cursor 移動到行首並覆蓋上一行而不是創建新行。

您可以檢查此代碼的結果:

System.out.println("------------------------");
System.out.println(new String(new byte[]{'a', 13, 'b'}));
System.out.println("------------------------");
System.out.println(new String(new byte[]{'a', 10, 'b'}));
System.out.println("------------------------");
System.out.println(new String(new byte[]{'a', 13, 10, 'b'}));
System.out.println("------------------------");

結果:

------------------------
b
------------------------
a
b
------------------------
a
b
------------------------

那么,如何修復呢? 只需刪除獨立的 \r 或將其替換為 \r\n (或 \n)

暫無
暫無

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

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