当前位置: 首页 > 知识库问答 >
问题:

Java BufferedOutputStream:要写入多少字节

督坚白
2023-03-14

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

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

谢谢

共有3个答案

万俟震博
2023-03-14

网络连接中的MTU(最大流量单位)是多少?例如,如果使用UDP,可以检查该值并使用较小的字节数组。如果这不是metter,您需要检查内存是如何消耗程序的。我认为1024-4096将是保存此数据并继续接收的良好变体

毋修为
2023-03-14

BufferedInputStream和BufferedOutputStream通常依赖于系统。arraycopy的实现。系统arraycopy有一个本机实现,它可能依赖于memmove或bcopy。复制的内存量将取决于缓冲区中的可用空间,但无论如何,本机代码的实现都相当高效,无论读写多少字节,都不太可能影响应用程序的性能。

然而,对于BufferedInputStream,如果您设置了一个上限标记,则可能需要创建一个新的内部缓冲区。如果确实使用了标记,则读取的字节数超过旧缓冲区中的可用字节数可能会导致临时性能下降,尽管摊销性能仍然是线性的。

正如Stephen C所提到的,您更可能看到由于网络而导致的性能问题。

蒙勇
2023-03-14

除非你有一个非常快的网络连接,缓冲区的大小不会有什么不同。我会说4k缓冲区会很好,尽管使用更大一点的缓冲区没有坏处。

这可能同样适用于使用read()与读取(字节[])。。。假设您使用的是一个BufferedInputStream。

除非你有一个非常快/低延迟的网络连接,否则瓶颈将是网络和你计算机的网络接口能够维持的数据速率。对于典型的互联网连接,应用程序可以比网络快两个或更多数量级的速度移动数据。因此,除非你做一些愚蠢的事情(比如在无缓冲流上进行1字节读取),否则你的Java代码不会成为瓶颈。

 类似资料:
  • 问题内容: 如标题所述,Python字典要处理多少费用?创建,插入,更新,删除全部。 渐近时间复杂性本身很有趣,但是它们与例如元组或正常列表的比较方式也很有趣。 问题答案: (就像s,当您不需要将值关联到每个键,而只需记录一个键是否存在或不存在时)就进行了非常优化。根据N个键或键/值对创建a ,提取is ,摊销摊销等。对于任何非微型容器,实际上都无法做得更好。 对于小型容器,您可以使用基于基准的基

  • 问题内容: 例如,如果我有一个带有两种情况的枚举,它是否比布尔值占用更多的内存?语言:Java,C ++ 问题答案: 在Java中,an 是成熟的类: Java编程语言的枚举类型比其他语言的枚举类型更强大。枚举声明定义了一个类(称为枚举类型)。枚举类主体可以包括方法和其他字段。 为了查看每个文件的实际大小,让我们做一个实际的文件并检查它创建的文件的内容。 假设我们有以下枚举类: 编译以上内容并反汇

  • 问题内容: 我正在使用低级I / O函数“写入”以我的代码(Linux上的C语言)将一些数据写入磁盘。首先,我将数据存储在内存缓冲区中,然后在缓冲区已满时使用“写入”将数据写入磁盘。那么“写”的最佳缓冲区大小是多少?根据我的测试,更快不是越大,所以我在这里寻找答案。 问题答案: 进行写操作可能是文件系统块大小的倍数,因此可能会有一些优势,尤其是在就地更新文件的情况下。如果向文件中写入的块少于部分块

  • http://localhost/test?name= 它的工作没有任何问题,没有抛出任何异常或任何其他迹象。为什么?

  • 问题内容: 我想知道单位是多少,转换为像素()时1em是多少。我还读过一些有关IE错误的文章,以克服应将哪种主体字体大小设置为某种大小,但不能遵循太多的问题。有人可以详细解释吗? 问题答案: 尽管您可能在其他地方读过,但em和px之间 没有 直接关系。 作为链接之一指出: “ em”值基于大写字母M的宽度 因此,每种字体都会有所不同。窄字体可能与扩展字体具有相同的高度(以px为单位),但是em大小

  • 问题内容: 从服务器以UTF-8发送时,我有一个大约500K的JavaScript字符串。如何用JavaScript判断其大小? 我知道JavaScript使用UCS-2,因此每个字符2个字节。但是,这取决于JavaScript实现吗?还是页面编码或内容类型? 问题答案: 值不依赖于实现,根据ECMA-262第三版规范,每个字符代表_UTF-16文本_ 的 单个16位单元 : 4.3.16字符串值