- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
byte[] message = ...
Socket socket = ...
DataOutputStream dOut = new DataOutputStream(socket.getOutputStream());
dOut.write(message); //#1
... //other code
让我们假设机器 1(使用上面的代码)试图向机器 2 发送一些东西,而机器 2 正试图从机器 1 读取字节。
根据TCP,我可以说如果机器2还没有成功读取上面发送的数据,第一行之后的代码就不会执行吗?
但是在什么时候,我可以说机器 2 已经读取了数据并且第 1 行之后的代码将执行?它发生在操作系统级别还是应用程序级别?例如,机器 2 操作系统将在机器 1 执行 writeByte
命令/语句后立即缓冲来自机器 1 的消息,因此机器 2 将向机器 1 发出信号以继续第 1 行?
或者如果 Java 应用程序在应用程序级别执行 readByte
命令/语句,机器 2 只会向机器 1 发出信号?
如果整个接收过程发生在操作系统级别,我们如何控制用于缓存传入数据的缓冲区大小(在机器 2 中)?
最佳答案
TCP 通常有本地缓冲区。Java 不处理由操作系统处理的通信。Java 访问本地缓冲区,读取将从缓冲区中清空字节,而写入会将字节放入缓冲区。
如果您尝试从空缓冲区读取或写入已满缓冲区,则阻塞 IO 的行为是阻塞。
收到数据 block 后,客户端将向发送方发送确认。发送方将在收到确认后从其缓冲区中清空该数据。
请记住,沿途的各种路由器和交换机可能有自己的缓冲区和发送方可能会在客户端接收任何数据之前收到确认。
可以使用 setReceiveBufferSize 和 setSendBufferSize 方法设置缓冲区大小。
http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html
关于java - DataOutput.writeByte()/DataInput.readByte() 或其他等效项在 Java 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17584032/
因为 writeByte() 的目的在两个类中是相同的。但是两者写的内容不同。 import java.io.*; class First { public static void m
遇到一个小问题,我无法理解。我有一个字符串,我想将其写入文件 .txt 中的字节(用于测试)。这是我的代码: // Check writeVarString, writing in checkVarS
我如何使用 WriteByte?下面的代码将不起作用,同时出现 CS1502 错误和“stream.WriteByte(totalSeasons);”处的 CS1502 错误。线。这令人沮丧,因为我非
我的程序将文件读取到字节数组中,然后尝试从该文件中提取 bmp 图像。问题是我遇到了越界错误。 { public static void main( String[] args ) {
我有一个小型 TCP 服务器程序和一个相应的客户端,它们通过 ServerSocket 和 Socket 类以及 DataInputStream/DataOutputStream 进行通信。我在向服务
我想使用 DataOutputStream#writeBytes ,但遇到了错误。来自 Java 文档的 writeBytes(String) 的描述: Writes out the string t
我正在尝试使用“RandomAccessFile”将字符串写入(和读取)文件,但是“fio.writeBytes(file1str)”在字符串末尾添加了一些垃圾: BufferedReader in
我正在从缓冲区读取字符串并将其写入服务器。我遇到的问题是,当我打开套接字并循环写入时,服务器永远不会接收到该字符串。当我使用它时: try { Socket sen
如何使用DataInputStream的方法读取DataOutputStream.writeBytes(String)写入的数据? 我真的不知道这个问题! 最佳答案 writeBytes(String
在函数实现 (https://golang.org/src/strings/builder.go) 上方的注释中,我们看到:“返回的错误始终为零。”。这同样适用于写入字符串构建器的所有其他变体。 如果
在函数实现 (https://golang.org/src/strings/builder.go) 上方的注释中,我们看到:“返回的错误始终为零。”。这同样适用于写入字符串构建器的所有其他变体。 如果
我正在使用 ObjectOutputStream 对象操作系统将字符串消息从客户端 Android 应用程序发送到 C++ 服务器。 我知道服务器必须如何接收我的消息:消息的每个字符都存储在字节数组
我正在用 Java 编程来与连接到 com 端口的设备通信(通过 USB 连接到 PC,但通过 RS232 到 USB 电缆连接)。我编写了一个与 jssc 对话的程序,该程序在 Windows 下正
需要在dart中实现以下 MemoryStream stream = new MemoryStream(288); stream.WriteByte((byte) 13); stream.WriteB
这个问题已经有答案了: writeBytes(str) vs write(str) in DataOutputStream (2 个回答) 已关闭 4 年前。 当使用DataOutputStream推
如果我想通过套接字发送一个整数,我应该使用哪个?有什么区别? Socket socket=new Socket(localhost, 9876); DataOutputStream writer=ne
在 DataOutputStream 中,writeBytes(str) 与 write(str) 有什么区别?是否有任何使用它们的提示/技巧?提前致谢。 最佳答案 DataOutputStream
我想为我的报告创建一个 HTML 文件。报告中的内容可以通过使用 BufferedWriter#write(String) 创建 File f = new File("source.htm"); Bu
byte[] message = ... Socket socket = ... DataOutputStream dOut = new DataOutputStream(socket.getOutp
我正在使用 this 开发一个简单的客户端服务器程序关联。我的服务器是 Mac 机器,客户端是 Windows 机器 (Win 10)。 客户端-服务器通信工作正常。当我检查使用 Wireshark
我是一名优秀的程序员,十分优秀!