首页 > 代码库 > 黑马程序员——Java基础——IO流(三)—对象的序列化(持久化),管道流,操作基本数据类型的流对象
黑马程序员——Java基础——IO流(三)—对象的序列化(持久化),管道流,操作基本数据类型的流对象
第一讲 对象序列化(持久化)
概述:
将堆内存中的对象存入硬盘,以包括对象的数据,称为持久化或序列化
使用的类:ObjectInputStream和ObjectOutputStream
特有方法:
ObjectInputStream
Object readObject():读取
ObjectOutputStream
void writeObject(obj):写入
1 /* 2 * 需求:将一个对象序列化,并从硬盘中读取序列化的对象 3 * 4 */ 5 import java.io.*; 6 //创建Person类,实现Seriallizable接口 7 class Person implements Serializable{ 8 // 定义一个serializable的版本号 9 public final static long serialVersionUID=32l;10 11 private String name;12 private int age;13 transient String id;//表示不能被序列化,不能改变14 static String country="Cn";//也是不能被改变15 16 Person(String name,int age,String id,String country){17 this.name=name;18 this.age=age;19 this.id=id;20 this.country=country;21 }22 public String toString(){23 return name+":"+age+":"+id+":"+country;24 }25 }26 27 //序列化28 public class ObjDemo {29 public static void main(String[] args)throws Exception{30 File file=new File("obj.txt");31 Person p=new Person("zs",56,"shenm","US");32 // 序列化人对象并写入file33 writerObj(p,file);34 // 读取序列35 readObj(file);36 }37 //读取38 private static void readObj(File file)throws Exception {39 ObjectInputStream ois=new ObjectInputStream(new FileInputStream(file));40 41 Person p=(Person)ois.readObject();42 43 System.out.println(p);44 45 ois.close();46 47 }48 49 private static void writerObj(Person p, File file)throws Exception {50 // 船舰序列流写入file51 ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(file));52 oos.writeObject(p);53 oos.close();54 55 }56 }
第二讲 管道流
概述:
管道流:PipedInputStream和PipedOutputStream
特点:
不需要临时容器,直接连接
一般结合多线程使用。
常用的操作步骤:
1、先创建一个读和写的类,实现Runnable接口,覆盖run方法
2\创建一个管道流,并用connect()方法连接
3、创建读写对象,并闯入线程内。start()执行
1 import java.io.*; 2 //读取线程 3 class Read implements Runnable{ 4 private PipedInputStream in; 5 Read(PipedInputStream in){ 6 this.in=in; 7 } 8 // 覆盖run 9 public void run(){10 byte[] buf=new byte[1024];11 System.out.println("读取前++没有数据阻塞");12 int len;13 try {14 len = in.read(buf);15 String s=new String(buf,0,len);16 System.out.println(s);17 18 } catch (IOException e) {19 // TODO Auto-generated catch block20 e.printStackTrace();21 }finally{22 try {23 if(in!=null)24 in.close(); 25 } catch (Exception e2) {26 throw new RuntimeException();27 }28 } 29 }30 31 }32 //写入数据33 class Write implements Runnable{34 private PipedOutputStream out=null;35 Write(PipedOutputStream out){36 this.out=out;37 }38 39 public void run() {40 try {41 System.out.println("开始希尔数据--");42 Thread.sleep(30);43 44 out.write("PP是什么".getBytes());45 } catch (Exception e) {46 // TODO: handle exception47 }finally{48 try {49 if(out!=null)50 out.close();51 } catch (Exception e2) {52 throw new RuntimeException("失败管理");53 }54 }55 56 }57 58 }59 60 public class PPStreamDemo {61 public static void main(String [] args){62 63 64 try {65 PipedInputStream in=new PipedInputStream();66 PipedOutputStream out=new PipedOutputStream();67 in.connect(out);68 69 new Thread(new Read(in)).start();70 new Thread(new Write(out)).start();71 } catch (IOException e) {72 throw new RuntimeException("关流失败");73 }74 75 }76 }
第三讲 操作基本数据类型的流对象
概述:
操作基本数据类型的流对象:DataInputStrea和DataOutputStream
这两个读写对象,可用于操作基本数据类型的流对象
方法
读:
byte型 readByte()
int型 readInt()
boolean型 readBoolean()
double型 readDouble()
String型 readUTF();
写
byte writeByte()
int writeInt()
boolean writeBoolean()
double writeDouble()
String writeUTF(Stirng str)
操作数字和字符串 字符编码
略
黑马程序员——Java基础——IO流(三)—对象的序列化(持久化),管道流,操作基本数据类型的流对象