java - 套接字和数据输入流

标签 java sockets datainputstream

我正在尝试理解这段代码

        DataInputStream stream = 
          new DataInputStream(
            new ByteArrayInputStream(messageBuffer));


        int     messageLength   = stream.readInt();
        char    recordType      = (char) stream.readByte();
        byte    padding         = stream.readByte();
        short   numberRecords   = stream.readShort();

messageBuffer 被初始化为 new byte[32768],通过 Socket.read() 方法填充。 我不明白的是,一旦 messageLength 被初始化为 stream.readInt(),第二个语句将如何工作,即 recordType?

不会是第一个语句从字节数组的开头读取一个 int 而下一个语句从字节数组的开头读取一个字节吗?它究竟如何知道从哪个点读取字节、整数、短裤等?

最佳答案

来自documentation :

A ByteArrayInputStream contains an internal buffer that contains bytes that may be read from the stream. An internal counter keeps track of the next byte to be supplied by the read method.

换句话说,DataInputStream 只是从 ByteArrayInputStream 中读取,而后者会记住字节数组中的当前位置,并在每次读取一些数据时推进它。

关于java - 套接字和数据输入流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6926823/

相关文章:

java - 为什么 ElementsCollection 的 waitUntil 方法受到保护?

java - 如果 IOException 关闭流的 DataInputStream

java - 如何从项目文件夹中获取文件

java - JTable 中的动画

java - 为什么 try-catch-finally 不重新提示用户?

linux - 使用 iptables 和 nfqueue 进行数据包转发

python - 我如何在远程 Windows 机器上截取屏幕截图并将其发回?

c - 使用 select 和 accept 启动新的文件描述符

java - Java如何从/sys/fs/cgroup/读取零长度文件?

python - 转置自动创建的列表中的数据