一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写入数据。

字节流:数据流最小的数据单元是字节

字符流:数据流最小的单元数字符。Java中的字符是Unicode编码,一个字符占两个字节

1.输入字节流InputStream

1)InputStream是所有输入字节流的父类,是一个抽象类

2)InputStream中的三个基本的读方法:

  public abstract int read():读取一个字节数据,并返回读到的数据,如果返回-1表示读到了输入流的末尾

  public int read(byte[] b):将数据读入一个字节数组,同时返回实际读取的字节数,如果返回-1表示读到了输入流的末尾

  public int read(byte[] b,int off,int len):将数据读入一个字节数组,同时返回时间读取的字节数,如果返回-1表示读到了输入流的末尾

                   off:指定在数组b中存放的数据的起始偏移位置;

                   len:指定读取的最大字节数。

  流结束的判断:方法read()的返回值为-1时;readLine()返回值为null时

3)public void close():关闭输入流,释放和这个流相关的系统资源

2.输出字节流OutputStream

1)OutputStream是所有的输出字节流的父类,它是一个抽象类

2)OutputStream中的三个基本的写方法:

  public abstract void write(int b):往输出流中写入一个字节

  public void write(byte[] b):往输出流中写入数组b中的所有字节

  public void write(byte[] b,int off,int len):往输出流中写入数组b中从偏移量off开始的len个字节的数据

3)public void close():关闭输出流,释放和这个流相关的系统资源

3.字符输入流Reader

1)Reader是所有的输入字符流的父类,它是一个抽象类

2)InputStreamReader是一个连接字节流和字符流的桥梁,它将字节流转变为字符流

4.字符输出流Writer

1)Writer是所有的输出字符流的父类,他是一个抽象类

2)OutputStreamWriter是OutputStream到Writer转换的桥梁

5.字符流与字节流转换

虽然Java支持字节流和字符流,但有时需要在字节流和字符流两者之间转换。InputStreamReader和OutputStreamWriter,这两个为类是字节流和字符流之间相互转换的类。

1)InputSreamReader用于将一个字节流中的字节解码成字符:

  有两个构造方法:

    InputStreamReader(InputStream in);

    功能:用默认字符集创建一个InputStreamReader对象

    InputStreamReader(InputStream in,String CharsetName);

    功能:接收已指定字符集名的字符串,并用该字符创建对象

2)OutputStream用于将写入的字符编码成字节后写入一个字节流。

  同样有两个构造方法:

    OutputStreamWriter(OutputStream out);

    功能:用默认字符集创建一个OutputStreamWriter对象;

    OutputStreamWriter(OutputStream out,String  CharSetName);

    功能:接收已指定字符集名的字符串,并用该字符集创建OutputStreamWrite对象

3)为了避免频繁的转换字节流和字符流,对以上两个类进行了封装。

  BufferedWriter类封装了OutputStreamWriter类;

  BufferedReader类封装了InputStreamReader类;

  封装格式:

  BufferedWriter out=new BufferedWriter(new OutputStreamWriter(System.out));

  BufferedReader in= new BufferedReader(new InputStreamReader(System.in);

  利用下面的语句,可以从控制台读取一行字符串:

  BufferedReader in=new BufferedReader(new InputStreamReader(System.in));

  String line=in.readLine();

6.字节流和字符流的区别

1)字节流没有缓存区,是直接输出的,而字符流是输出到缓冲区的,因此在输出时,字节流不调用close()方法时,信息已经输出了,而字符流只有在调用close()方法关闭缓冲区时信号才输出。要想字符流在未关闭时输出信息,则需要手动调用flush()方法

2)读写单位不同:字节流以字节(8 bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节

3)处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据

4)结论:只有处理纯文本数据就优先考虑使用字符流,除此之外都使用字节流

7.非流式文件类--File类

1)public static final String separator:表示路径分隔符"\"

2)public static final String pathSrparator:指的是分隔连续多个路径字符串的分隔符。

3)构造函数:

  1.File(String pathName)

    eg:File f1 = new File("FileTest.txt");//创建文件对象f1,f1所指的文件是在当前目录下创建的FileTest.txt

  2.File(String parent,String child)

    eg:File f2 = new File("D:\\dir1","FileTest2.txt");//注意:“D:\\dir1”目录事先必须存在,否则异常

  3.File(File parent,String child)

    eg:File f4 = new File("\\dir3");

      File f5 = new File(f4,"FileText5.txt");//如果"\\dir3"不存在,使用f4.mkdir()创建

 

posted on 2020-08-30 16:48  pokay_Z  阅读(106)  评论(0编辑  收藏  举报