我正在尝试通过java套接字发送文件并通过另一个接收它。但是,这种情况发生了:
发送内容:
/ * 这只是一个要传输的文件 * /
收到:
所以基本上我无法逃避堆栈溢出时收到的内容。它基本上是一堆不可读的字节(大约32个字节),然后是我发送的消息。
OutputStream os = sock.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os);
oos.writeObject(mybytearray);
oos.flush();
oos.close();
对于客户:
BufferedReader in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
FileOutputStream fos = new FileOutputStream("newfile.java");
BufferedOutputStream bos = new BufferedOutputStream(fos);
bytesRead = is.read(mybytearray,0,mybytearray.length);
current = bytesRead;
bos.write(mybytearray, 0 , current);
bos.flush();
bos.close();
sock.close();
答案 0 :(得分:1)
查看代码会有所帮助,但你所拥有的内容看起来像是基本的随机数据。有些事要检查:
答案 1 :(得分:1)
为什么要通过ObjectOutputStream
?可以直接通过OutputStream
方法使用write
,也可以选择DataOutputStream
,如果您发现必要的话。
此外,您不应使用Reader
类来传输二进制数据。来自Reader
的api:
用于阅读字符流的抽象类。
可在此处找到完整的“通过套接字发送文件”示例:
密钥服务器端代码:
OutputStream os = sock.getOutputStream();
System.out.println("Sending...");
os.write(mybytearray,0,mybytearray.length);
os.flush();
sock.close();
密钥客户端代码:
bytesRead = is.read(mybytearray,0,mybytearray.length);
答案 2 :(得分:0)
这没有任何意义。如果使用ObjectOutputStream,则必须使用ObjectInputStream来读取它。如果你想使用Reader来阅读它,你必须使用Writer来编写它。