JAVA数据流的概述

来源:互联网 发布:方维拼团源码下载 编辑:程序博客网 时间:2024/06/08 11:16
                                          

                                   JAVA数据流的概述

         考虑到数据源的多样性,为了有效的进行数据的输入、输出操作,java中把不同数据源与程序间的数据传输都抽像的表述为“流”(Stream),以实现相对统一和简单的输入/输出(Inout/Output,I/O)操作方式。

      下面就看看java数据流的概述:

  

流概述

流的分类:

•       按数据流动方向

–   输入流:只能从中读取字节数据,而不能向其写出数据

–   输出流:只能向其写入字节数据,而不能从中读取数据

•       按照流所处理的数据类型

–   字节流:用于处理字节数据。

–   字符流:用于处理Unicode字符数据

•       按照流所处理的源

–   节点流:从/向一个特定的IO设备读/写数据的流

–   处理流:对已存在的流进行连接和封装的流

过滤流

抽象的InputStream和OutputStream类允许我们对字串及数字进行读写。为达到这个目的,还需要功能更多的子类。例如:DateInputStream和DataOutputStream允许我们对所有基本的java类型进行读写。

    文件流类与抽象的InputStream和OutputStream类相似,这些类也只支持字节级的读写操作。换言之,只能从fin对象中读取字符和字节数组。byteb=fin.read(),他们没有提供专门的数值类型,所以DataInputStream没有办法从一个文件中获取数字。

解决方案:java给流职责分工,某些流(FileInputStream)负责从文件或另一些更特殊的地方读入字节数据。而另一些流

(DataInputStream、PrintWriter)负责将字节“组装”成更有用的数据类型。必须综合运用这两种流,将其合并成所谓的"过滤流(FilteredStreams)",方法是将一个现成的流传递给另一个流的构建器。

数据流

l        DataInputStream

l        DataOutputStream

类的构造及成员详见文档

//在文件中写入并读出人名及其工资

import java.io.*;

public class T1 {

    public static void main(String[] args) {

       String[] name = {"Tom","Jack","Mary"};

       double[] salary = {300, 400, 1200};

      

       try{         

           FileOutputStream fos = new FileOutputStream("res/salary.txt");

           DataOutputStream dos = new DataOutputStream(fos);

          

           for(int i=0; i<name.length; i++){

              dos.writeUTF(name[i]);

              dos.writeDouble(salary[i]);

           }

          

           dos.close();

           fos.close();

          

           ///////////////////////

          

           FileInputStream fin = new FileInputStream("res/salary.txt");

           DataInputStream dis = new DataInputStream(fin);

          

           for(int i=0; i<name.length; i++){

              String n = dis.readUTF();

              double s = dis.readDouble();

             

              System.out.println(n + " :" + s);

           }

          

           dis.close();

           fin.close();

       }catch(Exception e){

           e.printStackTrace();

       }

    }

}

字节缓冲流

l        BufferedInputStream

l        BufferedOutputStrem

类的构造及成员详见文档

默认情况下,流不会进行缓冲。即每读一次,都会要求操作系统提供一个字节。通过BufferedInputStream和

BufferedOutputStream对流构建器进行过滤分层,实现缓冲。

1、构造函数:

BufferedInputStream(InputStream in)    

BufferedInputStream(InputStream in, intsize) //size:缓冲区的大小  

2、代码演示: 

BufferedInputStream bis=newBufferedInputStream(System.in);   

BufferedInputStream bis=newBufferedInputStream(System.in ,100);  

//用缓冲字节流实现文件读写

import java.io.*;

public class BufferedIOTest {

    public static void main(String[] args) {

       try{

           FileOutputStream fos = new FileOutputStream("res/new.txt");

           BufferedOutputStream bos =new BufferedOutputStream(fos);

           DataOutputStream dos = new DataOutputStream(bos);

          

           dos.writeUTF("goodmorning!");

           dos.writeInt(250);

          

           dos.close();

           bos.close();

           fos.close();

          

           FileInputStream fis = new FileInputStream("res/new.txt");

           BufferedInputStream bis =new BufferedInputStream(fis);

           DataInputStream dis = new DataInputStream(bis);

          

           System.out.println(dis.readUTF() + "\n"+ dis.readInt());

          

           dis.close();

           bis.close();

           fis.close();

          

       }catch(Exception e){

           e.printStackTrace();

       }

    }

}

 

原创粉丝点击