一、字节高级流(处理流)
1.1 字节高级流的分类
过滤流(*)
缓冲流 BufferInputStream BufferOutPutStream
缓冲流主要功能是:为低级流在读写时,提供一种缓冲能力(靠内存)
数据流 DataInputStream DataOutPutStream
数据流主要功能是:允许我们使用一种与计算机无关的格式去读写数据
打印输出流 PrintStream
对象流(*)
合并流(了解)
SequenceInputStream类可以实现两个文件的合并操作,从两个低级流中读取数据字节,当到达流的末尾时从一个流转到另一个流 ,从而实现合并操作
1.2 字节输入缓冲流的使用

package com.woniuxy.java18.study.advance;import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;/*** 字节输入缓冲流* @author Administrator**/public class BufferInputStreamStudy {public static void main(String[] args) {// TODO Auto-generated method stub//定义一个文件对象String path = "D:\\movie\\japan\\dj\\bdy.txt";File file = new File(path);//定义缓冲输入流的变量BufferedInputStream bis = null;FileInputStream in = null;try {//定义文件输入流,并将其进行Buffer包装in = new FileInputStream(file);bis = new BufferedInputStream(in);byte[] data = new byte[1024];//读取数据while(bis.read(data) != -1) {//将接收到的内容,输出到控制台System.out.println(new String(data,"utf-8"));}}catch (Exception e) {// TODO: handle exceptione.printStackTrace();}finally {//关闭流try {bis.close();in.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
1.3 字节输出缓冲流的使用

package com.woniuxy.java18.study.advance;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;/*** 字节输出缓冲流* @author Administrator**/public class BufferOutputStreamStudy {public static void main(String[] args) {// TODO Auto-generated method stub//定义文件对象String path = "D:\\movie\\japan\\dj\\cxk.txt";File file = new File(path);BufferedOutputStream bos = null;FileOutputStream fos = null;try {if(!file.exists()) {file.createNewFile();}//实例化流fos = new FileOutputStream(file);bos = new BufferedOutputStream(fos);//向文件写入内容String str = "它不是拍电影的,它是个运动员!!!!!!!";byte[] data = str.getBytes();//写bos.write(data);//刷新(清空)缓冲流-->低级流bos.flush();}catch (Exception e) {// TODO: handle exceptione.printStackTrace();}finally {//关闭流try {bos.close();fos.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
1.4 数据流 DataInputStream DataOutputStream
这2个流,主要数据流,它的作用:可以让我们采用 与计算机无法的方式来完成对文件进行读写
与计算机无法的方式:采用Java的数据类型(String,基本数据类型)进行文件内容操作
package com.woniuxy.java18.study.advance;import java.io.BufferedInputStream;import java.io.DataInputStream;import java.io.EOFException;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.util.Arrays;/*** 数据输入流(高级流)* 特点:允许代码使用一种与计算机无法的格式来进行内容输出* @author Administrator**/public class DataInputStreamStudy {public static void main(String[] args) {// TODO Auto-generated method stubFile file = new File("D:\\94b69bb9-ea80-4a08-ade9-48a1a0bcbaf8.txt");DataInputStream dis = null;FileInputStream fis = null;BufferedInputStream bis = null;User[] users = new User[2];int index = 0;try {fis = new FileInputStream(file);bis = new BufferedInputStream(fis);//不考虑缓冲流,就直接使用文件输入流// dis = new DataInputStream(fis);dis = new DataInputStream(bis);//操作流while(true) {String str = dis.readUTF();int age = dis.readInt();boolean marry = dis.readBoolean();double income = dis.readDouble();User user = new User(str, age, marry, income);users[index] = user;index ++;}} catch (Exception e) {// TODO: handle exceptionif(e instanceof EOFException) {System.out.println("文件读取完毕!!!!");}else {e.printStackTrace();}}finally {System.out.println(Arrays.toString(users));try {dis.close();bis.close();fis.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
package com.woniuxy.java18.study.advance;public class User {private String name;private int age;private boolean marry;private double income;public User() {super();// TODO Auto-generated constructor stub}public User(String name, int age, boolean marry, double income) {super();this.name = name;this.age = age;this.marry = marry;this.income = income;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public boolean isMarry() {return marry;}public void setMarry(boolean marry) {this.marry = marry;}public double getIncome() {return income;}public void setIncome(double income) {this.income = income;}@Overridepublic String toString() {return "User [name=" + name + ", age=" + age + ", marry=" + marry + ", income=" + income + "]";}}
package com.woniuxy.java18.study.advance;import java.io.BufferedOutputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.util.UUID;/*** 数据输出流(高级流)* 特点:允许代码使用一种与计算机无法的格式来进行内容输出* @author Administrator**/public class DataOutPutStreamStudy {public static void main(String[] args) {// TODO Auto-generated method stubFile file = new File("D:\\" + UUID.randomUUID().toString()+".txt");DataOutputStream dos = null;//fos 必写FileOutputStream fos = null;//bos 选写(看你是否看重 IO性能)BufferedOutputStream bos = null;try {if(!file.exists()) {file.createNewFile();}//实例化流fos = new FileOutputStream(file);bos = new BufferedOutputStream(fos);dos = new DataOutputStream(bos);//操作流(采用UTF-8写字符串,写基本数据类型)dos.writeUTF("我的爱人啊,你在哪里啊,我做梦都在想你!!!!");dos.writeInt(33);dos.writeBoolean(true);//写入boolean的值dos.writeDouble(1200000.0);//操作流(采用UTF-8写字符串,写基本数据类型)dos.writeUTF("我的爱人啊,你在哪里啊,我做梦都在想你!!!!");dos.writeInt(33);dos.writeBoolean(true);//写入boolean的值dos.writeDouble(1200000.0);} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}finally {try {dos.close();bos.close();fos.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
