0

PNG画像をバイト配列に変換し、ソケットを使用してAndroidのクライアントに送信しました Androidでは、以下に示すようにバイトを読み取ります。

ByteArrayOutputStream dataBuffer = new ByteArrayOutputStream();
InputStreamReader in = new InputStreamReader(s.getInputStream());
int readLength;
byte buffer[] = new byte[1024];
while ((readLength = in.read(buffer)) != -1) {
 dataBuffer.write(buffer, 0, readLength);
 }
byte bitmapdata[] = dataBuffer.toByteArray();

しかし、私はここで非常に愚かな問題を抱えています。Javaは、in.read(buffer)のバイト配列を受け入れることができないというエラーを表示します。何らかの理由で、char []のみを受け入れるようで、「メソッドread(byte [])を解決できません」と表示されます。

なぜそれが起こっているのか、または私がこれを行うことができる他の方法を知っている人はいますか?

4

2 に答える 2

1

InputStreamReader には read.(byte[]) メソッドがありません。問題を解決するための例を次に示します: http://tutorials.jenkov.com/java-io/inputstreamreader.html

于 2013-03-16T00:59:47.987 に答える
0

JavaはUnicodeをサポートしているため、1つのJavaの長charさは少なくとも2byte秒、場合によってはそれより長くなります(詳細はこちら)。これは、Cなどの他の言語のように、これらのデータ型を交換可能に扱うことができないことを意味します。

生のバイトを処理したいので、から離れて、によって提供されたものInputStreamReaderを直接操作してInputStreamくださいSocket

このようなものが機能するはずです:

ByteArrayOutputStream dataBuffer = new ByteArrayOutputStream();
InputStream in = s.getInputStream();
int readLength;
byte buffer[] = new byte[1024];
while ((readLength = in.read(buffer, 0, buffer.length)) != -1) {
  dataBuffer.write(buffer, 0, readLength);
}
byte bitmapdata[] = dataBuffer.toByteArray();

画像データの代わりにテキストを読み取ることを期待している場合はSocketInputStreamReader可変バイト文字エンコード形式に関連する頭痛の種の多くを隠すため、これが最適な方法です(詳細はこちら) 。

于 2013-03-16T01:40:51.253 に答える