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

“BufferedInputStream”与“具有配置大小的FileInputStream”

戴树
2023-03-14

案例1=

案例2=

从案例1和案例2来看,BufferedInputStream在运行时性能方面没有任何改进。它所做的一切就是包装FileInputStream,并与我在案例2中所做的相同。

有人能帮我更好地理解吗?

共有2个答案

司寇照
2023-03-14

也许在学习了装饰器设计模式之后,您可以更好地理解BufferedInputstream。

BufferedInputStream不仅仅是缓冲数据,更重要的是它实现了InputStream接口。您可以将其视为任何其他InputStream,并将其与其他InputStream组合以创建更强大的InputStream。

您可以根据需要实现自己的BufferedInputStream,但我认为这并不像您想象的那么容易。

何甫
2023-03-14

是的,您可以通过从底层InputStream读取固定块来有效地重新实现BufferedInputStream所做的事情,但这并不容易:

  • 首先,读取(字节[])调用不能保证填充数组,您必须检查返回值。一个BufferedInputStream为您处理这个问题
  • 如果您手动管理缓冲区,那么让一些数据结构跨多个缓冲区实例可能是一件很难实现的事情,BufferedInputStream提供了众所周知的输入流接口,而您的代码不必关心缓冲
  • 由于最后一点,可以将缓冲输入流传递给任何接受输入流的对象

最后BufferedInputStream只是纯Java代码,因此您也可以手动执行任何操作,但这样做的理由很少。

tl;通过减少系统调用和缓冲读取,同时仍然提供正常的输入流接口,dr只是获得一些性能的简单方法。您可以在没有它的情况下实现它提供的一切,但几乎没有理由这样做。

 类似资料:
  • 就像上面提到的图像一样。但我将背景色黑色添加到默认,红色添加到19201080。对于19201080个像素分辨率不带红色的模拟器,我这样做是为了在Android中为不同的屏幕尺寸创建不同的UI

  • 在hazelcast映射配置中,如果我们将逐出策略设置为“无”,并使用最大空闲秒数、生存时间秒数,如下所示, 有人能解释一下,在这种情况下,最大尺寸是否有效?

  • 问题内容: 为什么在hibernate配置文件中为连接池设置10?size = 1是内置的size。为什么需要增加大小? 问题答案: 来自Hibernate API 文档。 但是,Hibernate自己的连接池算法非常初级。它旨在帮助您入门,不适合在生产系统中使用,甚至不用于性能测试。您应该使用第三方池来获得最佳性能和稳定性。只需将hibernate.connection.pool_size属性替

  • 本文向大家介绍Spring Boot 配置大全(小结),包括了Spring Boot 配置大全(小结)的使用技巧和注意事项,需要的朋友参考一下 Spring Boot 允许通过外部配置让你在不同的环境使用同一应用程序的代码,简单说就是可以通过配置文件来注入属性或者修改默认的配置。 SpringBoot的配置方式有很多,它们的优先级如下所示(优先级递减顺序): 1.命令行参数 2.来自java:co

  • 我有一个Spring Boot应用程序,并使用log4j2在centos linux中生成控制台和持久化日志。 我想在存档中只维护5mb的日志文件。 但问题是,我的归档日志文件总共有5mb。但我的主控制台日志保存在主日志文件中,即wc通知。输出超过1mb。 因此,我的磁盘已满,这导致了一个问题。 蛮力方法的解决方案是:每当重新启动(硬停止和启动)我的spring boot应用程序时,都会从wc通知

  • Consul提供了一个用于存储配置和其他元数据的键/值存储。Spring Cloud Consul Config是Config Server和Client的替代方案。在特殊的“引导”阶段,配置被加载到Spring环境中。默认情况下,配置存储在/config文件夹中。基于应用程序的名称和模拟解析属性的Spring Cloud Config顺序的活动配置文件创建多个PropertySource实例。例