java中DataOutputStream和FileOutputStream中,只关闭FileOutputStream,不关闭Data

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中DataOutputStream和FileOutputStream中,只关闭FileOutputStream,不关闭Data相关的知识,希望对你有一定的参考价值。

比如如下代码:
FileOutputStream fos=new FileOutputStream("D:\\abc.txt");
DataOutputStream dops=new DataOutputStream(fos);
dops.write("哈哈".getBytes());
fos.close();
没有对dops调用close()方法;这样会造成内存泄露吗,求高手解答,谢谢
我查看java源代码发现DataOutputStream是对FileOutputStream的封装,调用DataOutputStream的close()方法本质上还是调用FileOutputStream的close()方法,所以比较疑惑;

参考技术A 如果不调用该方法的时候,是会导致资源一直被占用着,别的程序如果再使用的话,势必重新开启通道,就会造成内存泄漏。 参考技术B 我也在疑惑这个问题,哎,咋没有高手给指点下。。

DataInputStream和DataOutputStream

DataOutputStream

数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中。然后应用程序可以使用数据输入流将数据读入。

DataOutputStream

数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。对于多线程访问不一定是安全的。 线程安全是可选的,它由此类方法的使用者负责。

/** 
 * 必须先使用DataOutputStream写入数据,然后使用DataInputStream读取数据方可。 
 *  
 * @author 徐越 
 *  
 */  
public class TestClass  
{  
    public static void main(String[] args) throws Exception  
    {  
        TestClass t = new TestClass();  
        t.write();  
        t.read();  
    }  
  
    public void write() throws Exception  
    {  
        String path = this.getClass().getClassLoader().getResource("test.txt").toURI().getPath();  
        OutputStream os = new FileOutputStream(path);  
        DataOutputStream dos = new DataOutputStream(os);  
        dos.writeDouble(Math.random());  
        dos.writeBoolean(true);  
        dos.writeInt(1000);  
        dos.writeInt(2000);  
        dos.flush();  
        os.close();  
        dos.close();  
    }  
  
    public void read() throws Exception  
    {  
        InputStream instream = this.getClass().getClassLoader().getResourceAsStream("test.txt");  
        DataInputStream dis = new DataInputStream(instream);  
        double d = dis.readDouble();  
        boolean b = dis.readBoolean();  
        // 先写的先被读出来  
        int i1 = dis.readInt();  
        int i2 = dis.readInt();  
        instream.close();  
        dis.close();  
        System.out.println(d);  
        System.out.println(b);  
        System.out.println(i1);  
        System.out.println(i2);  
    }  
}  

输出结果

0.4683893857027681
true
1000
2000

以上是关于java中DataOutputStream和FileOutputStream中,只关闭FileOutputStream,不关闭Data的主要内容,如果未能解决你的问题,请参考以下文章

Java中的DataInputStream和DataOutputStream的作用

大数据必学Java基础(七十三):数据流DataInputStream和DataOutputStream介绍

JAVA DataOutputStream和DataInputStream

JAVA IO操作:数据操作流:DataOutputStream和DataInputStream

java中DataOutputStream和FileOutputStream中,只关闭FileOutputStream,不关闭Data

Java IO DataInputStream 和 DataOutputStream