【问题标题】:How should I handle third-party input/output streams?我应该如何处理第三方输入/输出流?
【发布时间】:2011-01-23 20:52:34
【问题描述】:

有一个项目主要处理输入/输出流。所以我必须将流作为参数传递并从第三方库接收它们。我已经阅读了Good design: How to pass InputStreams as argument?Closing Java InputStreams,但我不能 100% 确定第三方共享相同的编码值并遵循最佳设计模式(特别是 - “打开流的人应该关闭流")

假设流非常大(500Mb - 3Gb)并且我的 CPU 和内存资源很紧张,下面是 java SO 社区的几个问题:

  1. 我是否应该尝试关闭从第三方库获得的流?
  2. 未关闭的流可能带来哪些危险影响(不包括额外的 GC 工作负载)
  3. 这些影响在某种程度上与流大小成正比吗?

【问题讨论】:

    标签: java coding-style iostream inputstream outputstream


    【解决方案1】:
    1. 您应该在流到达末尾时关闭它。如果传递的库不希望你这样做,它应该包装流以忽略 close()。
    2. 未关闭的流使资源保持打开状态,例如无法删除打开的文件。
    3. 大小并不重要。

    【讨论】:

    • 谢谢,从字节数组、字符串、XML DOM 等变量派生的流呢?我想这些内部第三方变量会占用我的堆大小,直到我关闭流,不是吗?
    • 通常在内存中的模型是用流或持有它们的对象进行清理的。关闭它们很少有太大的不同。关闭它们会对“外部”资源(如套接字/文件)产生影响。它们最终也会在 GC 上关闭,但您可能会在执行 GC 之前用完文件描述符。
    猜你喜欢
    • 2017-11-02
    • 1970-01-01
    • 2022-06-13
    • 2012-09-22
    • 1970-01-01
    • 2016-11-15
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多