无效的流标头-Java中的套接字传输
我还有一个问题 这是我客户的一部分:无效的流标头-Java中的套接字传输,java,sockets,serialization,deserialization,Java,Sockets,Serialization,Deserialization,我还有一个问题 这是我客户的一部分: Socket socket = new Socket("127.0.0.1", 3000); OutputStream out = socket.getOutputStream(); ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutput oo = null; try {
Socket socket = new Socket("127.0.0.1", 3000);
OutputStream out = socket.getOutputStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput oo = null;
try {
oo = new ObjectOutputStream(bos);
oo.writeObject(mp3dataStrings);
byte[] serializedMP3 = bos.toByteArray();
out.write(serializedMP3);
out.flush();
} finally {
oo.close();
bos.close();
}
这是我的服务器的一部分:
ServerSocket clientConnect = new ServerSocket(port);
System.out.println("SimpleServer running on port" + port);
Socket clientSock = clientConnect.accept();
InputStream is = clientSock.getInputStream();
byte[] buffer = new byte[1024];
for (int i = 0; i < buffer.length; i++) {
int b = is.read();
buffer[i] = (byte) b;
if (b == -1 | b == 0) break;
}
ObjectInputStream stream = new ObjectInputStream(new ByteArrayInputStream(buffer));
String[][] songs = (String[][]) stream.readObject();
stream.close();
当我向我的对象发送字符串[]时,我得到异常无效流头:ACED0000
我找不到这意味着什么,我必须做什么
问候
亚历克斯你把事情弄得比你需要的复杂得多
Socket socket = new Socket("127.0.0.1", 3000);
try {
ObjectOutputStream oo = new ObjectOutputStream(socket.getOutputStream());
oo.writeObject(mp3dataStrings);
oo.close();
} finally {
socket.close();
}
及
你把事情弄得比你需要的复杂得多
Socket socket = new Socket("127.0.0.1", 3000);
try {
ObjectOutputStream oo = new ObjectOutputStream(socket.getOutputStream());
oo.writeObject(mp3dataStrings);
oo.close();
} finally {
socket.close();
}
及
我同意Peter Lawrey的回答,但是原始代码中的问题源于字节缓冲区填充代码中的退出条件
byte[] buffer = new byte[1024];
for (int i = 0; i < buffer.length; i++) {
int b = is.read();
// THIS ARE PROBLEM LINES
buffer[i] = (byte) b;
if (b == -1 | b == 0) break;
}
ObjectInputStream stream =
new ObjectInputStream(new ByteArrayInputStream(buffer));
我同意Peter Lawrey的回答,但是原始代码中的问题源于字节缓冲区填充代码中的退出条件
byte[] buffer = new byte[1024];
for (int i = 0; i < buffer.length; i++) {
int b = is.read();
// THIS ARE PROBLEM LINES
buffer[i] = (byte) b;
if (b == -1 | b == 0) break;
}
ObjectInputStream stream =
new ObjectInputStream(new ByteArrayInputStream(buffer));
为什么要将输入流复制到缓冲区,然后将该缓冲区传递给ByteArrayInputStream?@benjarobin为什么会出现问题?听起来像是一个提示。为什么要将输入流复制到缓冲区,然后将此缓冲区传递到ByteArrayInputStream?@benjarobin为什么会有问题?听起来像是个暗示。非常感谢!我将在将来应用它。新年快乐,非常感谢!我将在将来应用它。新年快乐我正在使用这个解决方案,我在服务器上有一个错误。如果服务器不是我的计算机,则获取的流头套接字无效。有什么线索吗?@FranzéJr.很可能服务器没有写入对象输出流。服务器使用什么有线协议?它正在工作。可能是清洁问题。谢谢你们。我正在使用这个解决方案,但我在服务器上有一个错误。如果服务器不是我的计算机,则获取的流头套接字无效。有什么线索吗?@FranzéJr.很可能服务器没有写入对象输出流。服务器使用什么有线协议?它正在工作。可能是清洁问题。谢谢你们。