Androidアプリに接続するJavaプログラムを使用して、コンピューターから電話に画像を送信しようとしています。
画像を送信するために使用するコード:
byte[] data = imageToByteArray(img);
sendMessage(Main.imageCheck + data.length);
out.write(data);
out.flush();
このコードは、私のコンピューターの Java プログラムから実行されます。sendMessage() メソッドは次のとおりです。
public void sendMessage(String s) {
if (out != null && server.isConnected()) {
try {
out.writeUTF(s);
out.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
画像やその他のデータを受け取るために使用するコード:
while ((input = in.readUTF()) != null) {
if (!input.equalsIgnoreCase(pulseCheckMessage)) {
if (input.contains(imageCheck)) {
//byte[] data = Base64.decode(input.replace(imageCheck, ""), Base64.DEFAULT);
byte[] data = new byte[Integer.parseInt(input.replace(imageCheck, ""))];
int length = in.read(data);
updateScreenImage = BitmapFactory.decodeByteArray(data, 0, length);
MainActivity.this.runOnUiThread(updateUiRunnable);
} else {
inLine = "Received: " + input;
MainActivity.this.runOnUiThread(updateUiRunnable);
}
}
pulseTakenTime = System.currentTimeMillis();
pulseCheckReceived = true;
isAlive = true;
}
コメントアウトされたコード (base64 クラスを含む) は、Base64.encode を使用して画像データを文字列として送信し、byte[] 配列を文字列に変換して送信したときのものでした。スロー。そこで、より速いと思われるバイトを送信することにしました。
imageCheck と Main.imageCheck は同じ文字列です。アプリはその文字列を受け取り、それを認識し、byte[] 配列を期待するので、 in.read(data) を実行しようとしますが、エラーが発生します:
ERROR: java.nio.charset.ModifiedUtf8.decode(ModifiedUtf8.java:57)
ERROR: java.io.DataInputStream.decodeUTF(DataInputStream.java:444)
ERROR: java.io.DataInputStream.decodeUTF(DataInputStream.java:438)
ERROR: java.io.DataInputStream.readUTF(DataInputStream.java:433)
ERROR: com.mangopearapples.pccontroller.MainActivity.run(MainActivity.java:238)
ありがとう。