java Byte[]中的換行符問題以及socket中字符串的傳輸

  首先,“回車”(carriage return)和“換行”(line feed)這兩個概念的來歷和區別我們可以看看:

  在每行後面加兩個表示結束的字符。一個叫做“回車”,告訴打字機把打印頭定位在左邊界;另一個叫做“換行”,告訴打字機把紙向下移一行。

  當然,java 中換行是一個跨平臺的東西了。

  在不同的平臺上,換行符可能是不同的,例如:

    Mac平臺:\r
    Unix或Linux:\n
    Windows或Http:\r\n
    Unicode標準:\u2028

可以這樣來測試當前環境的換行符是什麼:

        if (System.getProperty("line.separator").equals("\r\n")) {
            System.out.println("\\r\\n is for windows");
        } else if (System.getProperty("line.separator").equals("\r")) {
            System.out.println("\\r is for Mac");
        } else if (System.getProperty("line.separator").equals("\n")) {
            System.out.println("\\n is for Unix/Linux");
        }
        System.out.println("aa\nbb");
        System.out.println("aa\rbb");
        System.out.println("aa\tbb");

win,eclispe輸出如下:

\r\n is for windows
aa
bb
aa
bb
aa	bb

綜上,如果你是寫一個http,例如webservice的程序,就直接將換行符硬編碼爲"\r\n"吧!


第二,在socket中進行數據傳輸通常就採用了byte[]這樣的中間件數據類型,所以,我們常常需要將string類型等轉成byte[],例如:


String sendString="發送數據";
byte[] sendBytes= sendString .getBytes("UTF8");
.......socket發送

這時,我們在分隔時候若採用了換行符就需要這樣:

        for (String singleData : exchangeCache) {
            sb.append(singleData).append("\r\n");
        }
.......socket發送

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章