在Java中读取C#字节数组

mid*_*avi 5 c# java tcp bytearray

我正在使用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();

        }
}
Run Code Online (Sandbox Code Playgroud)

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

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

任何克服这个问题的解决方案或建议都会受到欢迎.

问候,

Midavi.

end*_*rce 0

基于: http: //docs.oracle.com/javase/1.4.2/docs/api/java/io/InputStream.html

 int bytesRead = input.read(byteArrayJAR, 0, byteArrayJAR.length);
Run Code Online (Sandbox Code Playgroud)

读取所有可用字节,这意味着您的字节数据已读入byteArrayJAR,还是我在这里完全错了?

编辑:

刚刚检查了我的一些项目...我从 Android <=> C# 服务器应用程序发送数据。

我使用String data = input.readLine();(java)和_sw.WriteLine("Testdata");(C#)