"BufferedInputStream" 对比 "FileInputStream with configured size"
"BufferedInputStream" vs "FileInputStream with configured size"
案例 1 => BufferedInputStream 已创建,我想一次 read() 12 个字节,但它最多缓冲 1024 个字节(例如)以提高性能。因此,它使用 BufferedInputStream 构造函数中提供的传递的 FileInputStream 在单个系统调用中读取 1024 个字节。
案例 2 => 在 FileInputStream.read(byte[]) 中,我可以传递一个大小为 1024 的字节数组。这意味着在每个系统调用中,我的 FileInputStream 读取 1024 个字节。
从案例 1 和案例 2 中,我看不出 BufferedInputStream 在 运行 时间性能方面提供了任何改进。它所做的只是将 FileInputStream 包装起来,并执行与案例 2 中相同的操作。
谁能帮助我更好地理解?
是的,您可以有效地 re-implement 通过从底层 InputStream
读取固定块来执行 BufferedInputStream
的操作,但这并不那么容易:
- 首先,
read(byte[])
调用不能保证填充数组,您必须检查 return 值。 BufferedInputStream
会为您处理。
- 如果您手动管理您的缓冲区,那么让一些数据结构跨越多个缓冲区实例可能很难实现,
BufferedInputStream
提供了 well-known InputStream
接口,您的代码无需关心缓冲。
- 由于最后一点
BufferedInputStream
可以传递给任何接受 InputStream
. 的东西
最终 BufferedInputStream
只是纯 Java 代码,因此您 可以 手动执行任何操作,但原因很少这样做。
tl;dr BufferedInputStream
只是通过减少系统调用和缓冲读取来获得一些性能的简单方法,同时仍然提供正常的 InputStream
接口.如果没有它,您可以实现它提供的一切,但几乎没有理由这样做。
也许在了解了装饰器设计模式之后,您可以更好地了解 BufferedInputstream。
BufferedInputStream不仅仅是缓冲你的数据,更重要的是它实现了InputStream接口。您可以像对待任何其他 InputStream 一样对待它,并将它与其他 InputStream 结合起来以创建更强大的 InputStream。
你可以随心所欲地实现你自己的BufferedInputStream,但我觉得它并没有你想象的那么容易。
案例 1 => BufferedInputStream 已创建,我想一次 read() 12 个字节,但它最多缓冲 1024 个字节(例如)以提高性能。因此,它使用 BufferedInputStream 构造函数中提供的传递的 FileInputStream 在单个系统调用中读取 1024 个字节。
案例 2 => 在 FileInputStream.read(byte[]) 中,我可以传递一个大小为 1024 的字节数组。这意味着在每个系统调用中,我的 FileInputStream 读取 1024 个字节。
从案例 1 和案例 2 中,我看不出 BufferedInputStream 在 运行 时间性能方面提供了任何改进。它所做的只是将 FileInputStream 包装起来,并执行与案例 2 中相同的操作。
谁能帮助我更好地理解?
是的,您可以有效地 re-implement 通过从底层 InputStream
读取固定块来执行 BufferedInputStream
的操作,但这并不那么容易:
- 首先,
read(byte[])
调用不能保证填充数组,您必须检查 return 值。BufferedInputStream
会为您处理。 - 如果您手动管理您的缓冲区,那么让一些数据结构跨越多个缓冲区实例可能很难实现,
BufferedInputStream
提供了 well-knownInputStream
接口,您的代码无需关心缓冲。 - 由于最后一点
BufferedInputStream
可以传递给任何接受InputStream
. 的东西
最终 BufferedInputStream
只是纯 Java 代码,因此您 可以 手动执行任何操作,但原因很少这样做。
tl;dr BufferedInputStream
只是通过减少系统调用和缓冲读取来获得一些性能的简单方法,同时仍然提供正常的 InputStream
接口.如果没有它,您可以实现它提供的一切,但几乎没有理由这样做。
也许在了解了装饰器设计模式之后,您可以更好地了解 BufferedInputstream。
BufferedInputStream不仅仅是缓冲你的数据,更重要的是它实现了InputStream接口。您可以像对待任何其他 InputStream 一样对待它,并将它与其他 InputStream 结合起来以创建更强大的 InputStream。
你可以随心所欲地实现你自己的BufferedInputStream,但我觉得它并没有你想象的那么容易。