2020.7.30

学习内容:

1、过滤流 

通常字节流只具有读写字节内容的方法,它们只能在文件中读取或者向文件中写入字节,在实际开发中往往需要在文件中读取或写入各种类型的数据,如整型、布尔型等数据,就必须先将其他类型的数据转换成字节数组后写入文件,或者从文件中读取到的字节数组转换成其他数据类型,这时就需要包装类,他提供了向各种输出流对象中写入各种类型数据的方法

 DataOutputStream

必须给它传一个输入流对象,完成类似 DataOutputStream 功能的类就是一个过滤流类或处理流类

DataOutputStream 包装类的构造函数语法:

public DataOutputStream(OutputStream out ) 

 例:使用 DataOutputStream 写入内容

import java.io.IOException;
import java.io.DataOutputStream;
import java.io.OutputStream;
import java.io.FileOutputStream;
public class DataOutputStreamDemo {
    public static void main(String[] args)throws IOException{
        write();
    }
    public static void write() throws IOException{
//创建对象 OutputStream out
=new FileOutputStream("D:\\dataWrite.txt"); DataOutputStream dos=new DataOutputStream(out);
//写出各种数据 dos.writeInt(
123); dos.writeBoolean(true); dos.writeByte(34); dos.writeBytes("hello"); dos.writeChar(58); dos.writeChars("good"); dos.writeDouble(13.14); dos.writeFloat(20f); dos.writeShort(31); dos.writeUTF("c++"); dos.writeLong(13L);
//输出缓冲 dos.flush();
//关闭 dos.close(); } }

DatainputStream

必须给它传一个输出流对象,才能完成过滤流的功能

例:使用 DatainputStream 读数据

import java.io.DataInputStream;
import java.io.IOException;
import java.io.FileInputStream;

public class DataInputStreamDemo {
    public static void main(String [] args)throws IOException{
        read();
    }
    public static void read()throws IOException{
        FileInputStream in=new FileInputStream("D:/datahello.txt");
        DataInputStream dis=new DataInputStream(in);
        int a=dis.readInt();
        boolean b=dis.readBoolean();
        byte c=dis.readByte();
        char d=dis.readChar();
        double e=dis.readDouble();
        float f=dis.readFloat();
        short g=dis.readShort();
        long h=dis.readLong();
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
        System.out.println(e);
        System.out.println(f);
        System.out.println(g);
        System.out.println(h);
        dis.close();
        
    }

}

2、内存操作流 

之前的文件操作流是以文件的输入和输出为主的,文件操作流的输出位置是硬盘,但如果将输入输出的位置改变成内存,就称为内存操作流,使用 ByteArrayInputStream 完成内存的输入操作,而使用 ByteArrayOutputStream 完成内存的输出操作

例:使用内存操作流输出内容

import java.io.IOException;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.io.InputStream;

public class ByteOutputStreamDemo {
    public static void main(String[] args)throws IOException{
        outin();
    }
    public static void outin() throws IOException{
        String info="hello java";
        InputStream in=new ByteArrayInputStream(info.getBytes());
        OutputStream out=new ByteArrayOutputStream();
        int temp=0;
        while((temp=in.read())!=-1) {
            out.write(Character.toUpperCase((char)temp));
        }
        String s=out.toString();
        in.close();
        out.close();
        System.out.println(s);
        
    }

}

输出结果为:HELLO JAVA

3、缓冲流 

缓冲流的原理是将数据先缓冲起来,然后一起写入或读取出来,使用缓冲流读写文件非常高效,常用的缓冲流有以下几种:BufferedReader , BufferedWriter

BufferedReader 和 BufferedWriter

BufferedReader 属于字符流,如果要想使用 BufferedReader 就需要将一个字节流变成字符流,为了解决这样的问题,在Java中提供了以下两个转换类:

将输入的字节流变为字符流:InpurStreamReader

将输出的字符流变为字节流:OutputStreamWruter

在 BufferedReader 类中提供了一个专门的读取操作:

public String readLine ( ) throws IOException

例:使用 BufferedReader读取内容

import java.io. BufferedReader;
import java. io. FileInputStream;
import java.io. IOException;
import java.io. Inputst reamReader;
public class Buf feredReaderDemo {
    public  static void main (String[] args) throws IOException {
          read() ;
    }
    public static void read() throws IOException {
         //创建对象
       BufferedReader read = new BufferedReader (new InputstreamReader (new 
       FileInputStream ("D: /Hello. txt"))) ;
       String line= null;
       //读数据
      while ((line=read. readLine()) !=null) {
           System.out. println(line) ;
      }
      //关闭
      read.close() ;
   }
}

例:使用BufferedReader写数据

import java. io.BufferedWriter;
import java. io. FileOutputStream;
import java .io. IOException;
import java. io. OutputStreamwriter;
public class BufferedWriterDemo {
   public static void main(String[] args) throws IOException {
        write () ;
   }
    public static void write() throws IOException {
         //创建对象
         BufferedWriter  w= new BufferedWriter (new OutputStreamWriter (new 
         FileOutputStream("D:/Hello.txt"))) ;
         //写数据
         w.write ("Hello") ;
         w. write ("Java") ;
         //关闭
         w.close() ;
     }
}

* BufferedInputStream 和 BufferedOutputStream

使用 BufferedInputStream 和 BufferedOutputStream 通常用来读取或写入影像数据,例如图片、影片等

例:使用 BufferedInputStream 和 BufferedOutputStream 读写图片

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class BufferedInputOutput {
    public static void main(String[] args)throws IOException {
        outIn();
    }
    public static void outIn()throws IOException{
        BufferedInputStream in=new BufferedInputStream(new FileInputStream("F:/test.png"));
        BufferedOutputStream out=new BufferedOutputStream(new FileOutputStream("F:/test2.png"));
        byte[] buf =new byte[1024];
        int len=-1;
        while((len=in.read(buf))!=-1) {
            out.write(buf,0,len);
        }
        out.close();
        in.close();
    }
}

明天要学习的内容:

Scanner类、对象序列化与反序列化、打印流

原文地址:https://www.cnblogs.com/ltw222/p/13449795.html