我正在尝试使用连接到 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)
谢谢。