私は、サーバーに画像を送信しようとしているAndroidアプリケーションを持っています。私はBase64エンコーディングを使ってこれを行いましたが、それは非常にうまくいったのですが、送信する前にピクチャをエンコードするにはあまりにも多くのメモリ(および時間)がかかりました。Java/Android:ソケット上のバイト配列の読み取り/書き込み
私はAndroidアプリケーションを単にバイト配列を送信する場所まで切り離そうとしていますが、あらゆる種類のエンコーディングスキームで回避するのではなく、できるだけ多くのメモリとCPUサイクルを節約します。サーバはJavaで書かれている
public String sendPicture(byte[] picture, String address) {
try {
Socket clientSocket = new Socket(address, 8000);
OutputStream out = clientSocket.getOutputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
out.write(picture);
return in.readLine();
}
catch(IOException ioe) {
Log.v("test", ioe.getMessage());
}
return " ";
}
:
これは私がAndroidのコードは次のようになりたいものです。正確に同じバイト配列を正しく取得できるように、サーバーコードをどのように記述すればよいですか?私の目標は、できるだけ多くのCPUサイクルをAndroidに保存することです。
私が試したすべての方法では、データが破損したり、例外がスローされたりしています。
ご協力いただければ幸いです。
ストリームからバイト単位で読み込みを行うのは完全に非効率的で遅いです。一度に少なくとも1024バイトを読み込むほうがよい。 – Robert
私は新しいバイト[] {}の代わりにnullを返すのが良いアイデアだろうと思います。 – Zaki