2016-07-27 5 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は、すべてのバッファのデータが含まれていないいくつかのコードが長い話よりも良いですか? (このコードを実行するスレッドは1つだけです)。そのような操作の後には、私はしたくないからです。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クラスもご覧ください。

関連する問題