我的问题是DataInputStream在流仍然打开但没有数据时抛出EOFException
。我希望这会简单地阻止(尽管文档在这个问题上非常模糊)。
DataOutputStream:
public void onEvent() {
fos.writeInt(width);
fos.writeInt(height);
fos.writeInt(newBuffer.length);
fos.write(newBuffer);
}
DataInPutStream:
while(true) {
int width = fis.readInt();
int height = fis.readInt();
int length = fis.readInt();
byte[] bytes = new byte[length];
fis.read(bytes);
}
fos.write(intToByteArray(width));
fos.write(intToByteArray(height));
fos.write(intToByteArray(newBuffer.length));
Log.e(this.class.getName(), "Writing width: " + Arrays.toString(intToByteArray(width)) +
", height: " + Arrays.toString(intToByteArray(height)) +
", length: " + Arrays.toString(intToByteArray(newBuffer.length)));
fos.write(newBuffer);
if(repeat == -1) {
Log.e(this.class.getName(), "Closing ramFile");
fos.flush();
fos.close();
}
另一边我用这个:
while(true) {
byte[] intByteArray = new byte[] { -1,-1,-1,-1 };
fis.read(intByteArray);
Log.e(this.class.getName(), Arrays.toString(intByteArray));
int width = toInt(intByteArray, 0);
fis.read(intByteArray);
int height = toInt(intByteArray, 0);
fis.read(intByteArray);
int length = toInt(intByteArray, 0);
Log.e(this.class.getName(), "Reading width: " + width + ", height: " + height + ", length: " + length);
}
它给出:
[0, 0, 2, -48]
Reading width: 720, height: 1280, length: 3686400
奇怪的是,read()
没有阻塞,它只是愉快地继续运行,没有阻塞,但也没有填充数组中的任何值(将数组初始化为{9,9,9,9}后仍然是9,9,9,9)。
[-1, -1, -1, -1]
Reading width: -1, height: -1, length: -1
java.lang.NegativeArraySizeException: -1
这就是疯狂的感觉吗?
这里的答案相当简单(没有很好的文档记录)。
FileInputStream的read
请求没有超时--这意味着如果您从一个空的但未关闭的流中读取,它将返回而不填充字节(保持给定的字节“原样”)。
您可以使用LocalSocket
和LocalServerSocket
通过相同的机制流式传输数据,并使用
LocalServerSocket server = new LocalServerSocket(SOCKET_NAME);
LocalSocket socket = server.accept();
socket.setSoTimeout(60);
问题内容: 这可能很愚蠢,但是我想知道后台操作的区别。 上面两行代码之间的区别是什么,以及它们在什么情况下使用。 问题答案: extend :它是InputStream的专用版本,旨在读取文件。 根据InputStream的用途,有几种实现。 通常最好的做法是使用代码中所需的最高类型。因此,如果您的代码需要从而不是从a 读取数据,则应使用。但是,如果您确实需要保持对象的信息为a 而不只是a ,则应
问题内容: 我正在尝试使用File对象初始化FileInputStream对象。我在网上收到FileNotFound错误 这很奇怪,因为我已经通过相同的方法多次打开该文件来进行正则表达式。 我的方法如下: java.io.FileNotFoundException:C:\ dev的\服务器\的tomcat6 \的webapps \样品现场(访问被拒绝) 在java.io.FileInputStre
主要内容:使用命名管道双向通信管道是用于相关过程之间的通信。 我们是否可以使用管道进行不相关的进程通信,比方说,我们要从一个终端执行客户端程序,从另一个终端执行服务器程序? 答案是否定的。那么怎样才能实现不相关的进程通信,简单的答案就是使用 命名管道。 即使这适用于相关的进程,但是使用命名管道进行相关的进程通信没有任何意义。 我们使用一个管道进行单向通信,两个管道进行双向通信。 命名管道是否适用相同的条件。 答案是否定的,我们
我正试图通过命名管道使用VB.NET从windows应用程序连接到SQL Server2008。 但这根本不连接到服务器。这是使用命名管道连接到sql sererver的正确方法吗?
问题内容: 在网上进行了一些搜索,找到了使用命名管道的简单“教程”。但是,当我对后台作业执行任何操作时,我似乎会丢失很多数据。 [[编辑:找到了一个简单得多的解决方案,请参阅回复。因此,我提出的问题现在是学术性的,以防万一可能需要工作服务器]] 在Linux 2.6.32-25-generic#45-Ubuntu SMP上使用Ubuntu 10.04(星期六)10月16日19:52:42 UTC
问题内容: 我正在尝试在两个程序之间创建双向通信通道(一个在Python中,另一个在C#中) 当我在两个C#程序或两个Python程序之间创建一个命名管道时,一切都很好,但是当我尝试(例如)从Python代码连接到C#服务器时,它不起作用: C#代码: 如果我在Python中使用代码块(永远不会返回) 如果我使用open函数,它只会建立连接,但不会发生任何事情: 现在,如果我关闭Python程序,