一、今日学习内容:
今天学习了12.2.2 过滤流、12.2.3内存操作流的内容。
二、遇到的问题:
无
三、明日计划:
明天计划学习12.2.4缓冲流、12.2.5Scanner类、12.2.6对象序列化与反序列化的内容
今日学习的具体内容如下:
1.过滤流
整型、布尔型数据需要转换为字节数组后写入文件,或者从文件中读取到的字节数组转换为其他类型数据,这时候需要包装类,它提供了向各种输出流对象写入各种类型数据的方法。
(1)DataOutputStream
对于DataOutputStream必须给它传一个输出流对象,完成类似DataOutputStream功能的类就是一个过滤流类或处理流类。
DataOutputStream构造函数语法:
DataOutputStream的常见方法:
实例——使用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(); } }
(2)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.内存操作流
(1)输出位置
文件操作流 | 文件的输出输入流的输出位置是硬盘 |
内存操作流 | 输入输出位置是内存,使用ByteArrayInputStream完成内存的输入操作,使用ByteArrayOutputStream完成内存的输出操作 |
(2)实例——使用内存操作流输出内容
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); } }
测试截图: