学习内容:
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类、对象序列化与反序列化、打印流