JAVA学习笔记——IO流(数据流、内存操作流、打印流、标准输入输出流、随机访问流)

1.操作基本数据类型的数据流
数据输入流:DataInputStream
        DataInputStream(InputStream in)
数据输出流:DataOutputStream
        DataOutputStream(OutputStream out)
   用法和字节流基本一样,只是该流用来读写基本数据类型的数据。

/*
         * 输出流
         */

        //封装资源创建对象
        DataOutputStream dos = new DataOutputStream(new FileOutputStream("dos.txt")) ;

        //写出数据
        dos.writeByte(100);
        dos.writeShort(99);
        dos.writeInt(98);
        dos.writeLong(97);
        dos.writeFloat(96.96F);
        dos.writeDouble(95.9595);
        dos.writeChar('C');
        dos.writeBoolean(false);

        //释放资源
        dos.close();    

        /*
         * 输入流
         */

        //封装资源创建对象
        DataInputStream dis = new DataInputStream(new FileInputStream("dos.txt")) ;

        //读取数据,必须按照顺序读
        byte b = dis.readByte() ; //100
        short s = dis.readShort() ;//99
        int i = dis.readInt() ;//98
        long l = dis.readLong() ;//97
        float f = dis.readFloat() ;//96.96
        double d = dis.readDouble() ;//95.9595
        char c = dis.readChar() ;//C
        boolean bb = dis.readBoolean() ;//false

        //释放资源
        dis.close();

        System.out.println(b+"\n"+s+"\n"+i+"\n"+l+"\n"+f+"\n"+d+"\n"+c+"\n"+bb);

2.内存操作流 :用于处理临时存储信息的,程序结束,数据就从内存中消失(因此内存流的close()方法是无意义的)

  字节数组:
    ByteArrayInputStream:
    ByteArrayOutputStream:
  字符数组:
    CharArrayReader:
    CharArrayWriter:
  字符串:
    StringReader:
    StringWriter:

        /*
         * 字节数组,(字符数组和字符串用法类似)
         */
        //写入数据
        ByteArrayOutputStream bos = new ByteArrayOutputStream() ;

        for (int i = 0; i < 10 ; i++) {
            bos.write(("hello"+i).getBytes());
        }
        //因为是存在内存中,所以无法查看
        //查看源码可以知道,close()没有执行任何操作,是无意义的,因此可以不需要
        //bos.close();

        byte[] by = bos.toByteArray() ;

        //读取数据
        ByteArrayInputStream bis = new  ByteArrayInputStream(by) ;

        int b = 0 ;
        while((b = bis.read()) != -1){
            System.out.print((char)b);
        }

        //bis.close();

3.打印流
  字节打印流:PrintStream
  字符打印流:PrintWrite
    
  打印流的特点:
    A:只有些数据的流,没有读取数据的,只能操作目的地址,不能操作数据源
    B:可以操作任意类型的数据
      使用其特殊的方法
        print()
        println()
    C:如果启动了自动刷新,能够自动更新。
       PrintWriter pw = new PrintWriter(new FileWriter(“pw.txt”),true) ;
       但是必须要调用println()方法,这样不仅能实现自动刷新,还能实现换行。
       即println()一句等价于以下三句:
         bw.write() ;
         bw.nextLine() ;
         bw.flush() ;
    D:该流是可以直接操作文本文件的。
      哪些对象是可以直接操作文本文件的呢?
        FileOutputStream
        FileInputStream
        FileReader
        FileWriter
        PrintWriter
        PrintStream
         注意:看API,如果构造方法里同时有File类型的和String类型的参数,一般来说可以直接操作文件

    根据是否可以直接操作文件,可以把流分为:
      基本流:可以直接读写文件
      高级流:在基本流的基础上提供了一些其他功能

4.标准输入输出流
System类中的两个成员变量:
  public static final InputStream in : ”标准“输入流
  public static final PrintStream out :“标准”输出流

    由上可知,
    InputStream is = System.in ;
    PrintStream ps = System.out ;
    System.in的本质其实就是InputStream is
    System.out的本质其实就是PrintStream ps
  所以我们可以知道
  System.out.println() = ps.println()
  而System.out.print不存在的原因是因为 ps.print()不存在

 三种键盘录入方式:
   A:main()方法的args接收参数
   B:Scanner(JDK5以后)
     Scanner input= new Scanner(System.in) ;
     String s = input.nextLine() ;
     int x = input.nextInt() ;
     ..
   C:通过字符缓冲流包装标准输入流实现
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) ;

5.随机访问流

猜你喜欢

转载自blog.csdn.net/u012990327/article/details/79860314