Java 如何使用BufferedInputStream.read()获得真正的字节顺序?

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个字

服务器根据以下内容向我发送int:

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
这就是为什么我没有得到我的int 1

  • 如果不等待4,读取(字节,0,4)的目的是什么 字节
  • 如何以真正的顺序简单地获取我的4个字节

  • 注意:当客户端使用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。。。