Java 如何使用BufferedInputStream.read()获得真正的字节顺序?
服务器根据以下内容向我发送int:Java 如何使用BufferedInputStream.read()获得真正的字节顺序?,java,datainputstream,bufferedinputstream,Java,Datainputstream,Bufferedinputstream,服务器根据以下内容向我发送int: DataOutputStream stdOut=newdataoutputstream(myServerSocket.getOutputStream()); 标准写入(1); stdOut.flush(); 我试着从我的客户那里读到: BufferedInputStream dIn=new BufferedInputStream(myClientSocket.getInputStream()); 字节[]接收=新字节[4];//writeInt()写入4个字
DataOutputStream stdOut=newdataoutputstream(myServerSocket.getOutputStream());
标准写入(1);
stdOut.flush();
我试着从我的客户那里读到:
BufferedInputStream dIn=new BufferedInputStream(myClientSocket.getInputStream());
字节[]接收=新字节[4];//writeInt()写入4个字节
int status=-1;
状态=dIn读取(接收,0,4);
//状态=1
//(int)接收=0
我正在等待4个字节来计算发送的Int。
但是,它只接收1个字节并处理它,而不等待剩余的字节。
因为我等待了4个字节,所以我尝试了以下方法:
int count=0;
而(计数<4){
状态=dIn读取(接收);
计数+=状态;
System.out.println(“读取:+count”);
}*/
我看到它先读取1个字节,然后读取3个字节
- 实际上,当我打印十六进制结果时,我得到:00李>
- 似乎是这样(按顺序)发送的:00 00 01
- 分两部分接收:00,然后00 01
- 它的存储方式是:00 01 00
注意:当客户端使用DataInputStream时,readInt()可以正常工作…使用
DataInputStream
及其readInt()方法
DataInputStream dIn = new DataInputStream(new BufferedInputStream(myClientSocket.getInputStream()));
int status = dIn.readInt();
使用DataInputStream
及其readInt()
方法
DataInputStream dIn = new DataInputStream(new BufferedInputStream(myClientSocket.getInputStream()));
int status = dIn.readInt();
我不确定我是否理解你的问题。如果DataInputStream具有您需要的行为,则使用它。1。4指定了要传输的最大字节数,正如它在Javadoc中明确指出的那样。2.您的读取循环有一个bug,readInt()
没有。不清楚为什么您没有使用有效的代码,这与发件人是对称的。我在这个论坛上读到BufferedInput/OutputStream更快。我想试着比较一下。我不确定我是否理解你的问题。如果DataInputStream具有您需要的行为,则使用它。1。4指定了要传输的最大字节数,正如它在Javadoc中明确指出的那样。2.您的读取循环有一个bug,readInt()
没有。不清楚为什么您没有使用有效的代码,这与发件人是对称的。我在这个论坛上读到BufferedInput/OutputStream更快。我想试着比较一下。谢谢,它似乎很管用!事实上,我不知道要使用的语法,我使用的是没有数据流的BufferedStream,谢谢,它似乎很管用!!事实上,我不知道要使用的语法,我使用了BufferedStream而不使用DataStream。。。