java - 转储大量 DataInputStreams 是不好的做法吗?

标签 java datainputstream

假设我有一个包含 3 维 vector 的数据类。

class Vec3 {
    float x, y, z;
    public Vec3(float x, float y, float z) { /* ... */ } 
} 

然后我想赋予它从流中读取的功能。我有 float ,所以最简单的选择是 DataInputStream。

public static Vec3 read(DataInputStream in) {
    float x = in.readFloat();
    float y = in.readFloat();
    float z = in.readFloat();
    return new Vec3(x, y, z);
} 

当然,我希望它支持所有 InputStream 类型。因此,我将创建一个包装任何流的重载。

public static Vec3 read(InputStream in) {
    return read(new DataInputStream(in));
} 

但是,此方法创建的 DataInputStream 永远不会关闭,只是在读取后转储。这是不好的做法吗?会导致问题吗?如果我有很多 Vec3 需要读取怎么办?

最佳答案

DataInputStreamInputStream 的薄包装器,几乎没有自己的资源。他们的 close() 方法仅关闭包装的输入流。创建大量临时对象仅意味着创建许多临时对象供 GC 收集。创建和丢弃许多 DataInputStream 对象没有危险,但如果您尝试优化性能,则可能需要避免这样做。

另一方面,尝试支持所有输入流类型对我来说似乎过于笼统。我会让该方法仅接受 DataInputStreamDataInput 接口(interface)。

关于java - 转储大量 DataInputStreams 是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24720786/

相关文章:

java - 数字字符引用的 JSoup 编码问题

java - Cassandra 读取/获取性能

java - Android、XML View 文件和 Java 后端,我如何使用后端 Java 创建自定义 View ?

java - DataInputStream readByte 返回一个大值

Java DataInputStream 与 System.in 的使用

java - 使用 DataInputStream 和 DataOutputStream 以及套接字的管道损坏

java - DataInputStream readLine() 已弃用

java - 在线Gitlab ci上安装Java

java - 如何隐藏java进程的参数?

java - Java从输入流中逐行读取数据