[問題] byte[] 轉 String

看板java作者 (LaPass)時間13年前 (2012/10/17 10:30), 編輯推噓1(1010)
留言11則, 5人參與, 最新討論串1/1
寫網路連線時,遇到一個狀況,是像這樣: byte[] b=new byte[1024]; DatagramSocket socket=new DatagramSocket(9000); DatagramPacket packet=new DatagramPacket(b, 1024); socket.receive(packet); System.out.println("訊息("+new String(packet.getData())+")"); 這裡出現的內容會是 訊息(HELLO! 這是測試訊息 )  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ↑ 這裡會出現一大堆空白 除了把結尾的空白replace掉之外 請問有辦法解決空白的問題嗎? (例如找字串結尾的識別標誌) 這樣看起來很醜,而起且沒辦法知道對方是傳空白過來,或是根本沒傳 題外話,之前在跟中華電信的簡訊API做銜接時 也看到取得的訊息後有一大串空白 現在想起來..... 應該也是同樣的狀況 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.59.16.65

10/17 10:41, , 1F
空白是 byte[] initial 時就有的,重點是你要指定存值的長度
10/17 10:41, 1F

10/17 10:46, , 2F
byte array 預設是 0 吧.
10/17 10:46, 2F

10/17 10:58, , 3F
既然是String的話,用trim()如何?不過對方是否傳空白
10/17 10:58, 3F

10/17 10:59, , 4F
就得在trim()前行判斷了
10/17 10:59, 4F

10/17 11:01, , 5F
發送的時候是用 byte[] b="字串".getBytes();
10/17 11:01, 5F

10/17 11:03, , 6F
然後包成packet時用 b,b.length 這樣
10/17 11:03, 6F

10/17 11:04, , 7F
packet 有 getLength() 方法,我想應該是問它唄
10/17 11:04, 7F

10/17 11:04, , 8F
沒辦法的話..... 就只能用trim()了....
10/17 11:04, 8F

10/17 11:06, , 9F
謝謝 我試試看
10/17 11:06, 9F

10/17 11:12, , 10F
成功 new String(packet.getData(),0,packet.getLength())
10/17 11:12, 10F

10/19 00:28, , 11F
感覺上面那一長串好像出現了表情符號XDD
10/19 00:28, 11F
文章代碼(AID): #1GVXWlt6 (java)