将InputStreamReader与Java一起使用时出错

将InputStreamReader与Java一起使用时出错,java,objectinputstream,Java,Objectinputstream,我试图从客户端向服务器发送一个int值。以下是我正在使用的客户端代码: _port = 8071; _socket = new Socket("localhost", _port); Random rand = new Random(); int n = rand.nextInt(50) + 1; DataOutputStream dos = new DataOutputStream(_socket.getOutputStream()); dos.writeInt(n); dos.flu

我试图从客户端向服务器发送一个int值。以下是我正在使用的客户端代码:

_port   = 8071;
_socket = new Socket("localhost", _port);

Random rand = new Random();
int  n = rand.nextInt(50) + 1;
DataOutputStream dos = new DataOutputStream(_socket.getOutputStream());
dos.writeInt(n);
dos.flush();
服务器代码

try {
    input = new BufferedReader(new InputStreamReader(socket.getInputStream()));

    ObjectInputStream in = null;
    in = new ObjectInputStream(socket.getInputStream());
    int ClientNumber= in.readInt();
    System.out.println(ClientNumber);
}
但是我得到一个无效的流头错误

无效的流标头:0000002B位于 readStreamHeader(ObjectInputStream.java:781) 位于java.io.ObjectInputStream。(ObjectInputStream.java:278)位于 ServiceRequest.run(ServiceRequest.java:24)位于 Executors$RunnableAdapter.call(Executors.java:439) 位于java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 在java.util.concurrent.FutureTask.run(FutureTask.java:138)中 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) 运行(Thread.java:680)

有人知道是什么导致了错误吗?我的代码设置是否不正确?

您正在使用
DataOutputStream
进行编写,并使用
ObjectInputStream
进行读取。您应该改为使用:

您还应该在这里删除
input
:您没有从中读取,而且这看起来像是一个二进制数据流,因此不适合将其视为文本


哦,您应该在
最后
块中关闭输入流。

尝试这样更改它

try {
             //   input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            DataInputStream in = new DataInputStream(socket.getInputStream());
            int clientNumber= in.readInt();
            System.out.println(clientNumber);
}

它应该会起作用。ObjectInputStream只能读取ObjectOutStream发送的流,它以一个幻数(标题)
0xACED
开头,请参见

为什么要创建一个
InputStreamReader,将其包装在一个
BufferedReader`中,然后完全忽略它?
try {
             //   input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            DataInputStream in = new DataInputStream(socket.getInputStream());
            int clientNumber= in.readInt();
            System.out.println(clientNumber);
}