代码改变世界

Java DataInputStream 与 DataOutputStream

2012-07-20 21:18  youxin  阅读(1372)  评论(0编辑  收藏  举报

   DataOutputStream

A data output stream lets an application write primitive Java data types to an output stream in a portable way. An application can then use a data input stream to read the data back in.

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

 

下面向一个文件写入数据:

public class DataInput {
    public static void main(String[] args)  
    {
        
        try {
            FileInputStream fis = new FileInputStream("C:/readme.txt");
            BufferedInputStream bis = new BufferedInputStream(fis);
            DataInputStream dis = new DataInputStream(bis);
            
            FileOutputStream fos = new FileOutputStream("C:/temp.txt");
            BufferedOutputStream bos = new BufferedOutputStream(fos);
            DataOutputStream dos=new DataOutputStream(bos);
            
            dos.writeBytes("ab斜体");
            dos.writeUTF("ab斜体");
            dos.writeChars("ab斜体");
            dos.write(1);
            dos.close();
            
        } catch (Exception e) {
            // TODO: handle exception
        }
          
               
        
    }

}

主要{             } 不能随便乱添加,我开始在前面初始化添加了{ },{ }把后面的write隔离开始,报错说:

dos 未定义的标识符!原因是{ }代表了一个作用域。

还有,流打开后一定要记住关闭close,我开始没有写dos.close(),没有任何结果,添加之后有了一些字符和乱码的数据。

 

包装类DataOutputStream、DataInputStream为我们提供了多种对文件的写入和读取方法,如writeBoolean(),writeUTF(),writeChar,writeByte(),writeDouble()等和对应的read方法,这些方法极大的方便了我们的写入和读取操作,下面结合一个程序来探讨一下这些方法的使用。

public class Test_Three {
    
    public static void main(String[] args) throws Exception{
        
        /**
         * DataInputStream与DataOutputStream
         * 
         * 1.DataInputStream → FileInputStream → InputStream
         *     (数据输入流允许应用程序以机器无关的方式从底层输入流中读取基本java数据类型)
         *   
         *   DataOutStream → FileOutputStream → OutputStream
         *   (数据输出流允许应用程序以适当方式将基本Java数据类型写入输出流中。
         *       然后,应用程序可以使用数据输入流将数据读入。)
         *   
         *   2.流:传输的二进制。
         */
        /**
         * 1.写
         */
        File file = new File("C:/person.data");
        //文件输出流
        FileOutputStream outputStream = new FileOutputStream(file);
        //数据输出流
        DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
        
        //给person.data这个文件写入数据
        dataOutputStream.writeInt(123);
        dataOutputStream.writeUTF("写入中文,ok");
        dataOutputStream.writeFloat(234.4f);
        
        //关闭流
        dataOutputStream.flush();
        dataOutputStream.close();
        
        /**
         * 2.读
         */
        //文件输入流
        FileInputStream inputStream = new FileInputStream(file);
        //数据输入流
        DataInputStream dataInputStream = new DataInputStream(inputStream);
        
        //读出
        int firstInt = dataInputStream.readInt();
        String str = dataInputStream.readUTF();
        float secFlt = dataInputStream.readFloat();
        
        System.out.println(firstInt+"---"+str+"-----"+secFlt);
        dataInputStream.close();
        
        /**
         * ★注意事项:读取和写入的顺序必须一样,否则抛出错误,也不能少读取。
         */
    }

}