Java中String類型和Byte類型的互換問題

來源:互聯網
上載者:User
     在進行Android的用戶端和服務端的介面開發的過程中,筆者遇到這樣的問題,因為採用的是流InputStream和OutputStream的操作,其中的參數都為byte型,在進行協議設計的時候,不可避免的需要將其轉換為String類型,然後再在服務端進行識別並進行下一步的操作,但是在byte型轉換為String類型的過程中,嘗嘗會出現亂碼,開始筆者百思不得其解,後來根據Java Doc中關於String類型中toString()方法的說明,找到了相關的解決辦法-使用String的建構函式,將byte類型的數組作為參數傳入即可。

     詳細的情況如下:     String類型的字元/字串轉換為byte型:     String s = "Hello,world";//定義字串變數     byte [] b = new byte[1024];//初始化byte對象b     b = s.getBytes();//將字串變數byte化,結果存在b中     b = s.getBytes(Charset charset);//charset的取值可以為

  Charset

Description

  US-ASCII Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the Unicode character set
  ISO-8859-1   ISO Latin Alphabet No. 1, a.k.a. ISO-LATIN-1
  UTF-8 Eight-bit UCS Transformation Format
  UTF-16BE Sixteen-bit UCS Transformation Format, big-endian byte order
  UTF-16LE Sixteen-bit UCS Transformation Format, little-endian byte order
  UTF-16 Sixteen-bit UCS Transformation Format, byte order identified by an optional byte-order mark
     b = s.getBytes(String charsetName);     b = getBytes(int srcBegin, int srcEnd, byte[] dst, int dstBegin);     通過以上方法均可將一個String類型的字串轉變為byte類型,那麼如何將byte類型的數組轉化為String類型呢?     若使用:     String s1 = b.toString();則根據控制台列印的結果為:[B@de6ced,顯然並不是我們需要得到的結果,那麼這種情況下該如何做呢?  看看Java Doc中關於toString()函數的定義:   toString

     public String toString()
     返回該對象的字串表示。通常,toString 方法會返回一個“以文本方式表示”此對象的字串。結果應是一個簡明但易於讀懂。
建議所有子類都重寫此方法。
     Object 類的 toString 方法返回一個字串,該字串由類名(對象是該類的一個執行個體)、at 標記符“@”和此對象雜湊碼的無符號十六進位表示組成。換句話說,該方法返回一個字串,它的值等於:
getClass().getName() + '@' + Integer.toHexString(hashCode())
     返回:
該對象的字串表示形式。

     由上面的含義可知,使用b.toString()返回的是一個十六進位的無符號數,是一個雜湊碼,與我們需要得到的資料不同,故使用toString()方法是行不通的。     正確的方法是使用byte型數組作為一個參數,使用String構造一個字串,即為String s1 = new String(b);即可。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.