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