问题标签 [bufferedinputstream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1473 浏览

java - Java BufferedOutputStream:要写入多少字节

这更像是良心问题而不是技术问题:p 我正在编写一些 java 代码来从服务器下载文件...为此,我使用的是 BufferedOutputStream 方法 write() 和 BufferedInputStream 方法 read() .

所以我的问题是,如果我使用缓冲区来保存字节,那么要读取的字节数应该是多少?当然,我可以使用 int byte = read() 然后 write(byte) 逐字节读取,或者我可以使用缓冲区。如果我采用第二种方法,在定义每次读取\写入的字节数时,是否有哪些方面我必须注意?这个数字对我的程序有什么影响?

谢谢

0 投票
0 回答
452 浏览

java - Android RandomAccessFile 和文件系统缓冲区

我知道 RandomAccessFile 不使用缓冲(与 FileInputStream 不同,它显然不能与 BufferedInputStream 结合使用)。

我需要从随机文件位置(无法排序,因为它们不断到达)读取许多小块数据,所以 RandomAccessFile 听起来很理想。我的问题:文件系统仍然做一些缓冲,不是吗?所以,虽然我不应该严格依赖它,但我仍然可以预期接近每个的读取不会到达硬件,是吗?(假设读取是基于块的,因此文件系统可以缓冲已读取的块)

我的应用程序既可以安装在 SD 卡上,也可以安装在 Android 设备的手机内存上。Android 基于 linux,但我不知道文件系统缓冲是如何工作的,以及它是否取决于读取是来自手机内存还是 SD 卡。

0 投票
2 回答
1990 浏览

java - Java DataInputStream 与 BufferedInputStream

我正在寻找一种有效的解决方案来接收和处理从套接字连接到服务器的异步消息(大小不一)。这是一个很好的带宽量(可能是 250 kB/s 的稳定状态,并且可以有高达 1 MB/s 的短脉冲)。目前我正在使用 DataInputStream,但在忙碌的时候我会断开连接(如果队列积压变得太大,服务器会断开客户端的连接)。

谁能确认 BufferedInputStream 是否可以更好地工作?我读过它会一次检索大块数据,而不是逐字节检索,因此操作系统调用更少。

谢谢!

0 投票
1 回答
147 浏览

stream - 无缓冲流的行为类似于行缓冲

我正在阅读有关流的信息,发现我们可以通过使用 setvbuf() 函数来控制流...它是在行缓冲模式下编写的,当遇到换行符并且在无缓冲时没有缓冲时,流将数据发送到文件。 ..所以我写了以下代码...

所以我认为因为这些是无缓冲的流,所以输入应该在我写入屏幕后立即发送到标准输出......但是程序等待我在写完每一行后按回车然后只有输出出现在屏幕上(如fwrite 的结果)...我的问题是为什么程序在这些是无缓冲的流时等待输入(即换行符)...

0 投票
2 回答
825 浏览

android - 下载大图(size > 300K)时inputstream.read没有响应

嗨,大家好。下载大尺寸图片时出现问题。很奇怪,从流中读取字节总是没有响应。我的代码如下,欢迎提出任何建议。

0 投票
1 回答
9855 浏览

java - 套接字:BufferedOutputStream 还是只是 OutputStream?

为了在 Java 中通过 TCP 获得最快的传输速度,最好:

选项 A:

选项 B:

我已经读到将超过 8 KiB 的数据写入 OutputStream 时性能会受到影响,建议将其以小块的形式写入,而不是一次写入 8 KiB。8 KiB 是 BufferedOutputStream 的默认缓冲区大小。

但是,我还读到,在通过网络传输数据时,最好尽快清除字节。这意味着使用缓冲区和小块写入会增加不必要的开销。

那么,选项A还是选项B?哪个效果最好?

现在我猜选项 A 提供最高的传输速度,同时比选项 B 消耗更多的 CPU。选项 B 可能会更好,因为它不会慢很多,但节省了大量的 CPU。

--

额外问题:触摸 TCP 窗口大小是个好主意吗?例如,将其设置为 64 KiB:

我尝试在测试机器上将其设置为 128 KiB,因为我读到它可以提高速度,但是当服务器有几个连接时,CPU 处于 100%,而不是像我不理会它时的 ~2%。我猜 128 KiB 太高了,除非你有一个可以处理流量高峰的好服务器,但是将它设置为 32 KiB 是否明智?我认为我的默认值是 8 KiB。

(“套接字”是“java.net.Socket”)

0 投票
2 回答
1049 浏览

java - 不一致的 BufferedInputStream 读取(字节 [])行为

我对 BufferedInputStream.read(byte[]) 的理解是读取操作从 pos 开始,一直读取到字节数组已满或流结束。

我在 BufferedInputStream 上调用下面的 readInt 方法。

当我在 Eclipse 调试器中跟踪执行时,stream.read(buffer4)调用(无论起始 pos 值如何)通常会导致 pos 的值设置为 4,读取的 4 个字节是来自输入流的前四个字节。read(byte[]) 调用是否会在某些情况下悄悄地重置流,如果是,什么时候?这似乎是预期的行为(这不是我的代码),当它以这种方式运行时,程序运行良好。

我遇到的问题是,有时,仅在 Windows 上并且仅当输入流包含特定内容时(在这种情况下,由于上游丢弃的套接字导致错误消息),这种 pos 的重置不会在它似乎是预期的情况下发生to,这会导致该方法从流中的错误位置读取并返回错误的值。

我们在 Solaris 上使用相同的代码,虽然我没有在这个平台上进行调试器逐步调试,但在 Solaris 下,程序运行良好,并且我试图修复的错误不会发生。我不知道的流是否存在一些特定于平台的问题?

谢谢。

0 投票
2 回答
1097 浏览

java - 合并文件时BufferOutputStream写入零字节

我正在尝试将n个文件合并为单个文件。但是我的功能出现了奇怪的行为。该函数在n秒内被调用x次。假设我有 100 个文件要合并,每秒我调用 5 个文件并合并它。在下一秒,数量翻倍为 10,但从 1-5 是与之前相同的文件,其余的是新文件。它工作正常,但在某些时候,它给出零字节或有时给出正确的大小。

您能帮我找出下面函数中的错误吗?

*对不起我的英语不好

0 投票
2 回答
129 浏览

java - BufferedInputStream 说它不可用,但无论如何都可以使用

有人可以向我解释为什么在注释掉 in.available()>0 的情况下这很好用,但是当我把它放回去时它会中断?

更具体地说:我正在制作一个 Android 应用程序,用户可以在其中搜索一个术语,该搜索被发送到空间中的某个东西,我以 xml 形式返回结果,并用它们做一些事情。当我返回的 xml 足够小(参见上面代码中的“长度”)时,代码在 in.available()>0 的情况下工作得很好。但如果长度很大,in.available() 返回 0。但是随着注释掉,一切都会继续顺利进行。

这是为什么?这是我需要担心和解决的问题吗?

0 投票
0 回答
227 浏览

java - BufferedInputStream 没有接受大量输入

我在java中相对较新,我试图将二进制矩阵作为输入,其中行和列的总数将在2和1000之间。我正在使用BufferedInputStream,对于小矩阵,我的代码正在工作(给出正确的输出)例如 4x4 矩阵。但是对于 6x9 输入,它不起作用。实际上我正在尝试解决 12367 号 UVA 问题。

我的代码

对于这样的输入:

(其中 1 是测试用例的数量,4 4 是矩阵维度,其余是矩阵元素)

输出是“Case 1: both 4”,这是预期的,但输入如下 -

它没有给出任何输出&在调试时我发现在读取所有矩阵元素之前,它是从主线程单步执行的,因此程序没有执行。

谁能告诉我问题出在哪里:(它与缓冲区大小有关吗?