2012-05-14 175 views
1

我將字符串轉換爲byte [],然後再次使用getbytes()和String構造的Java爲String的byte [],字符串和字節[]問題的java

String message = "Hello World"; 
byte[] message1 = message.getbytes(); 

使用PipedInput/OutputStream中我發這個到另一個線程,其中,

byte[] getit = new byte[1000]; 
pipedinputstream.read(getit); 
print(new String(getit)); 

這最後的打印結果1000打印...我想要的實際字符串長度。我怎樣才能做到這一點?

+0

'pipedinputstream'的類型是什麼? – Shine

+0

@Shine:做出一個有教養的猜測:-) –

回答

1

當讀取字符串,你需要得到的字節數讀取,並給予長度的字符串:

byte[] getit = new byte[1000]; 
int readed = pipedinputstream.read(getit); 
print(new String(getit, 0, readed)); 

注意,如果你的字符串是超過1000個字節,它將被截斷。

+0

ooh..ya ..我只是忘了那... thx ... –

1

您忽略了讀取的字節數。做到這一點,如下:

byte[] getit = new byte[1000]; 
    int bytesRead = pipedinputstream.read(getit); 
    print(new String(getit, 0, bytesRead).length()); 
0
public String getText (byte[] arr) 
{ 
StringBuilder sb = new StringBuilder (arr.length); 

for (byte b: arr) 
    if (b != 32) 
     sb.append ((char) b); 

return sb.toString(); 
} 

不那麼幹淨,但應該工作。

-1

我將字符串轉換爲byte [],然後再次字節[]爲String

爲什麼?往返旅程保證不起作用。字符串不是二進制數據的容器。不要這樣做。不要將頭撞在牆上:一段時間後疼痛會停止。

+0

我想要數據流通過pipedinputstream!它只需要字節[]作爲參數... –

+0

@VineetMenon因此,圍繞它們包裝InputStreamReader和OutputStreamWriter,然後您可以編寫字符。但是我的下一個問題就是爲什麼你認爲你需要管道?我從未在15年內將管道流投入生產。 – EJP

+0

:我想在2個線程之間交換數據(文本)...同步。無論如何,這個問題由Vivien解決方案解決.. –