假设我有一个包含 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
需要读取怎么办?
最佳答案
DataInputStream
是 InputStream
的薄包装器,几乎没有自己的资源。他们的 close()
方法仅关闭包装的输入流。创建大量临时对象仅意味着创建许多临时对象供 GC 收集。创建和丢弃许多 DataInputStream
对象没有危险,但如果您尝试优化性能,则可能需要避免这样做。
另一方面,尝试支持所有输入流类型对我来说似乎过于笼统。我会让该方法仅接受 DataInputStream
或 DataInput
接口(interface)。
关于java - 转储大量 DataInputStreams 是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24720786/