首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataInputStream\DataOutputStream的性能

DataInputStream\DataOutputStream的性能
EN

Stack Overflow用户
提问于 2012-03-05 22:13:02
回答 2查看 5.2K关注 0票数 6

我目前正在使用一个缓冲流来读写一些文件。在这中间,我做了一些数学处理,其中一个符号是一个字节。

阅读:

代码语言:javascript
复制
InputStream input = new FileInputStream(outputname)
input.read(byte[] b,int off,int len)

要编写:

代码语言:javascript
复制
OutputStream output = new BufferedOutputStream(
                           new FileOutputStream(outputname),
                           OUTPUTBUFFERSIZE
                       )
output.write((byte)byteinsideaint);

现在我需要添加一些标题数据,并支持短符号。我想使用DataInputStreamDataOutputStream来避免将其他类型转换为字节,我想知道它们的性能如何。

我需要使用

代码语言:javascript
复制
OutputStream output = new DataOutputStream(
                             new BufferedOutputStream(
                                  new FileOutputStream(outputname),
                                  OUTPUTBUFFERSIZE
                             ) 
                       );

为了保留数据缓冲的优点,或者它足够好地使用

代码语言:javascript
复制
OutputStream output = new DataOutputStream(
                           new FileOutputStream(outputname)
                       )
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-05 22:19:58

您应该在两者之间添加BufferedOutputStreamDataOutputStream没有实现任何缓存(这很好:关注点分离),如果不缓存底层的OutputStream,它的性能将非常差。即使是最简单的方法,如writeInt(),也可能导致四次独立的磁盘写入。

据我所知,只有[write(byte[], int, int)](http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html#write(byte[],%20int,%20int%29)和writeUTF(String)在一个byte[]块中写入数据。其他的则逐字节写入原始值(如intdouble)。

票数 7
EN

Stack Overflow用户

发布于 2012-03-05 22:26:42

您绝对需要将BufferedOutputStream放在中间。

感谢您对性能的关注,我有两个建议:

  1. 使用java压缩来收缩您的流。有用的文章可以找到here.
  2. Use组合而不是继承(这是推荐的做法)。使用getInputStream()和getOutputStream()创建一个包含PipedInputStream和PipedOutputStream的管道。methods.You不能直接将管道对象传递给需要流的对象,但可以传递其get方法的返回值来完成此操作。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9568072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档