代码之家  ›  专栏  ›  技术社区  ›  java.is.for.desktop

Java的[Input | Output]为每个字节流一个方法调用:性能问题?

  •  0
  • java.is.for.desktop  · 技术社区  · 16 年前

    [输入|输出]流 从JDK1.0开始就存在了,而他们的角色

    大多数概念似乎相似,只有一个例外:的基类 溪流 声明一个处理 单一的 一次字节,而基 类声明了一个处理整个过程的抽象方法 char -数组。

    因此,鉴于我对它的理解是正确的,每个 流动 类被限制为处理单个字节(从而对 每个 每个数组只需要一个方法调用(-buffer)。

    这不是一个巨大的性能问题吗?

    流是否可以实现为 InputStream OutputStream ,但仍然是基于 byte

    5 回复  |  直到 16 年前
        1
  •  5
  •   Vivien Barousse    16 年前

    所以在我看来,这不是什么性能问题,是的,您可以扩展输入/输出流并基于字节数组。

        2
  •  3
  •   Daniel    16 年前

    单字节读取几乎总是一个巨大的性能问题。但是如果你读了InputStream的API文档,你会发现你必须重写read(),但是也应该重写read(byte[],int,int)。大多数使用任何类型InputStream的代码都会调用数组样式的方法,但是该函数的默认实现只是通过为每个字节调用read()来实现的,因此会对性能产生负面影响。

    对于OutputStream,同样的情况也适用。

        3
  •  1
  •   Yoni    16 年前

    正如丹尼尔所说,你必须超越 read() read (byte[],int,int)

    但是,我怀疑您是否应该关心性能,因为jvm可以并且将为您内联该方法。最重要的是,我觉得这不是个问题。

    而且,大多数读者在场景后面使用一些底层输入流,因此在任何情况下,这些基于char数组的方法最终都会调用 read(byte[],int,int) 甚至 读取()

        4
  •  1
  •   Andre Holzner    16 年前

    请注意 Readers Writers 更多

    除此之外, InputStream 和 OutputStream

        5
  •  0
  •   irreputable    16 年前

    就性能而言,如果用BufferedInputStream包装它,JVM应该能够优化单字节读取方法调用的开销,即,它的速度与您自己进行缓冲一样快。