gpt4 book ai didi

c# - 在 Java 中读取 C# 字节数组

转载 作者:可可西里 更新时间:2023-11-01 02:32:16 26 4
gpt4 key购买 nike

我正在使用 TCP 套接字将文件从 C# 客户端传输到 Java 服务器。在 C# 客户端上,我将文件转换为字节数组以进行传输并使用 NetworkStream 发送它。

在 Java 服务器上,我使用以下代码将接收到的字节数组转换回文件;

public void run()  {

try {

byte[] byteArrayJAR = new byte[filesize];
InputStream input = socket.getInputStream();

FileOutputStream fos = new FileOutputStream(
"Controller " + controllerNumber + ".jar");

BufferedOutputStream output = new BufferedOutputStream(fos);

int bytesRead = input.read(byteArrayJAR, 0, byteArrayJAR.length);
int currentByte = bytesRead;

System.out.println("BytesRead = " + bytesRead);

do {

bytesRead = input.read(
byteArrayJAR,
currentByte,
(byteArrayJAR.length - currentByte));

if (bytesRead >= 0) {

currentByte += bytesRead;

}
}

while (bytesRead > -1);

output.write(byteArrayJAR, 0, currentByte);
output.flush();
output.close();
socket.close();

}

catch (IOException e) {

e.printStackTrace();

}
}

如果接收到的字节数组来自使用 Java 编程的客户端,则上面的代码有效,但对于 C# 客户端,代码会卡在 bytesRead = input.read(...) 方法的 do-while 循环中。

有谁知道为什么此时代码对于 C# 客户端而不是 Java 客户端挂起?根据 println 消息的输出,数据肯定由 InputStream 接收,并在 bytesRead 变量初始化时读取一次,但在 do-while 循环期间不会读取。

欢迎提出任何克服此问题的解决方案或建议。

问候,

米达维。

最佳答案

您需要从 C# 中将字节作为 sbyte 而不是 byte 发送。

此外,您应该将 do/while 循环更改为常规 while 循环。如果您在第一次调用 input.read 时已经读取了流中的所有内容,那么您将在第二次调用时阻塞,因为 read 将等待输入。

关于c# - 在 Java 中读取 C# 字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8913998/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com