2016-07-27 35 views
0

我在一個奇怪的問題面前。一些代碼比長的故事更好:爲什麼當我調用toString()時字符串接收者的尺寸小於原始ByteArrayOutputStream的大小

ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 
buffer.write(...); // I write byte[] data 
// In debugger I can see that buffer's count = 449597 
String szData = buffer.toString(); 
int iSizeData = buffer.size(); 
// But here, szData's count = 240368 
// & iSizeData = 449597 

所以我的問題是:爲什麼szData不包含所有緩衝區的數據? (只有一個Thread運行這段代碼),因爲在那種操作之後,我不想szData.charAt(iSizeData - 1)崩潰!

編輯:szData.getBytes()。length = 450566。我認爲有編碼問題。最好使用一個字節而不是一個字符串?

+0

多字節字符也許? – Shark

+1

@Shark不,絕對:http://stackoverflow.com/questions/16270994/difference-between-string-length-and-string-getbytes-length –

+0

@JozefChocholacek哦,我確定它是*絕對*但沒有OP張貼字節/字符,我只能猜測。 – Shark

回答

1

在Java中,charbyte,取決於平臺的默認字符編碼,char可以在內存中佔用最多4個字節。你用字節(二進制數據)或字符(字符串)工作,你不能(輕易地)在它們之間切換。

對於像C中的strncasecmp這樣的字符串操作,使用String類的方法,例如, String.compareToIgnoreCase(String str)。也可以看看Apache Commons Lang庫中的StringUtils類。

相關問題