问题标签 [bufferedoutputstream]

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 投票
2 回答
23681 浏览

java - 就性能而言,在什么时候用 BufferedOutputStream 包装 FileOutputStream 才有意义?

我有一个模块负责读取、处理和写入字节到磁盘。字节通过 UDP 传入,在组装各个数据报之后,被处理并写入磁盘的最终字节数组通常在 200 字节到 500,000 字节之间。偶尔会有字节数组,组装后超过 500,000 字节,但这种情况比较少见。

我目前正在使用FileOutputStream'swrite(byte\[\])方法。我也在尝试将FileOutputStreama包装起来BufferedOutputStream,包括使用接受缓冲区大小作为参数的构造函数

似乎使用BufferedOutputStream倾向于稍微更好的性能,但我才刚刚开始尝试不同的缓冲区大小。我只有一组有限的示例数据可供使用(来自示例运行的两个数据集,我可以通过我的应用程序进行管道传输)。考虑到我所知道的关于我正在写入的数据的信息,是否有一个通用的经验法则可以用来尝试计算最佳缓冲区大小以减少磁盘写入并最大限度地提高磁盘写入的性能?

0 投票
1 回答
192 浏览

format - LISP:(格式)仅在成功(读取)后打印

我正在阅读Paul Graham的《 ANSI Common Lisp 》一书,有这个例子:

它的行为应该是这样的:


$(询问号码)

请输入一个数字。一种

请输入一个数字。(哼哼)

请输入一个数字。52

52


但是当我尝试它(SBCL 1.0.55)时,它不会打印格式字符串,直到成功读取


$(询问号码)

一种

(哼哼)

52

请输入一个数字。请输入一个数字。请输入一个数字。

52


错误在哪里?如何使其按预期方式运行?

0 投票
2 回答
738 浏览

java - What happens when you write(byte[] b) to a BufferedOutputStream? (Java)

When you use the method write(byte[] b) to write to a BufferedOutputStream, the write method from FilterOutputStream is used. The documentation says:

"The write method of FilterOutputStream calls its write method of three arguments with the arguments b, 0, and b.length. "

Which write method with three arguments is it referring to? The one in FilterOutputStream, or the one in BufferedOutputStream? (i.e. is the write actually buffered?).

I believe it is, but I'm not sure.

0 投票
4 回答
4494 浏览

java - BufferedOutputStream 实际上是如何在低级别工作的?

我理解背后的理论BufferedOutputStream。字节被写入缓冲区数组,直到它被填满,然后写入(刷新)到底层流 - 这个想法是它比逐字节写入更快,因为操作系统调用更少。

但是,从BufferedOutputStream类和方法的实现 ( BufferedOutputStream.java ) 来看,似乎最终来自缓冲区的字节只是逐字节写入的。

我认为是这样的,因为:

在 BufferedOutputStream.write(byte b[], int off, int len) 中有一行 out.write(b, off, len)。由于 out 是 OutputStream 的一个实例,而不是 BufferedOutputStream,它正在调用 OutputStream.write(byte[], int, int)。这又使用 for 循环逐字节写入

请有人澄清实际发生了什么,以及它如何更快?

0 投票
1 回答
26026 浏览

java - 使用 BufferedOutputStream 写入大文件

BufferedInputStream 我正在尝试使用&读写大文件(大于 100 MB)BufferedOutputStream。我收到堆内存问题和 OOM 异常。
代码如下所示:

我的问题是当我们使用它时BufferedOutputStreeam它是否会保留内存直到完整的文件被写出?
使用 编写大文件的最佳方法是什么BufferedOutputStream

0 投票
2 回答
31036 浏览

java - BufferedInputStream 到 byte[] 以通过 Socket 发送到数据库

我一直在寻找这个问题的答案,但实际上找不到任何东西。今天早些时候,我问我如何通过字节数组将文件变成字符串,然后再返回,以便稍后检索。

人们告诉我,我必须只存储字节数组,以避免讨厌的编码问题。所以现在我已经开始努力了,但我现在碰壁了。

基本上,我之前使用无缓冲流将文件转换为字节数组。这在理论上很有效,但它会占用大量内存,最终会抛出堆大小异常。我应该改用缓冲流(或者我被告知),我现在遇到的问题是从 BufferedInputStream 到 byte[]。我尝试复制和使用本文档中的方法

http://docs.guava-libraries.googlecode.com/git/javadoc/index.html?com/google/common/io/package-summary.html

我将无缓冲流交换为缓冲流。唯一的问题是,我不能直接将缓冲的输出流转换为字节数组,就像使用无缓冲的流一样。

帮助?:)

编辑:

我仍然收到堆空间错误。所以我现在将发布所有代码:

main.java

BufferedByteStream.java

0 投票
4 回答
1338 浏览

java - 使用 BufferedOutputStream 通过 while 循环将字节写入文件。需要帮助

我正在尝试使用 BufferedOutputStream 将字节写入文件,但我需要它在 while 循环中工作。这意味着使用 TFTP 服务器。它写入的文件中绝对没有任何内容(这是毫无意义的)。谁能帮我这个?

0 投票
1 回答
1299 浏览

java - BufferedOutputStream 没有将所有内容写入文件

我试图创建一个 TFTP 服务器,但是当它接收到一个文件时,似乎并非所有文件都保存在服务器上(缺少一些字节)。该文件创建良好,大部分数据已写入,但由于文件不完整,它被归类为损坏且无法打开。有谁知道如何解决这个问题?

主班

WRQ 类

0 投票
1 回答
2122 浏览

java - Android - BufferedOutputStream 不刷新

我对 BufferedOutputStream 有疑问。我想通过套接字连接将 kml 文件从 Android 设备发送到 java 服务器。(连接正常,我已经能够在我的程序的其他部分与 PrintWriter 交换数据)

为了发送我的 kml 文件,我填充了缓冲区。但是当我刷新()它时,什么也没有发生。

inFile 是我用来读取 kml 文件的流 out 是我的 BufferedOutputStream 使用我的套接字的 OutputStream

我没有关闭我的对象,但我不想,我不只使用一次。这就是问题所在…… close() 方法发送缓冲区的数据,但也关闭了套接字。flush() 方法不发送缓冲区的数据。

我想在不关闭套接字的情况下刷新缓冲区。

我也尝试使用 mySocket.shutdownOutput();

这个方法关闭我的流并保持我的套接字打开,这就是我想要的。但是当我尝试打开一个新的输出流时,异常 java.net.SocketException: Socket output is shutdown

那么,如何在不关闭我的 sokcet 的情况下刷新我的缓冲区无法打开新的输出流?

0 投票
4 回答
1473 浏览

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

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

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

谢谢