IO流的分类汇总
输入流(InputStream) : 通过程序只能从流中读取字节或者字符数据
输出流(OutputStream) : 通过程序只能从流中向外输出字节或字符数据
2> 按照处理数据类型划分:
字节流(byte) : 8bits;处理字节数据(如音频,视频,图片等二进制文件)
字符流(char) : 16bits;处理Unicode(字符)数据(如纯文本文件,字符串信息)
节点流 :直接跟输入输出源沟通的流,如FileInputStream,FileOutputStream, FileReader, FileWriter…
处理流 :对其他流进行包装处理,如转换流, 缓冲流
转换流 : 字节流<<<------>>>字符流, 如InputStreamReader,OutputStreamWriter
缓冲流 : 如BufferedInputStream,BufferedOutputStream, BufferedReader, BufferedWriter
随机访问流: RandomAccessFile类
对象的序列化与反序列化
对象的序列化:
就是将一个java对象存储到文件,网络等其他的存储介质中;一个java类实现序列化接口之后,可以将对象的信息完整的保存到文件或者网络中进行传递
实现序列化的两种方法:
1> implements Serializable,通过对象输出流将java对象写入文件ObjectInputStream,ObjectOutputStream
2> implements Externalizable , 重写writeObject()以及readObject()方法以精确的控制哪些属性需要被序列化和被读取
package com.softeem.seri;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
//序列号,在进行对象反序列化时判断并识别被反序列化对象是否是原对象
public class TestGame {
public static void main(String[] args) throws IOException, ClassNotFoundException {
Player p = new Player("一二", 100, 20, new Date());
// 对象序列化将一个java对象存储到文件,网络,远程服务器
File file = new File("src\\com\\softeem\\homework\\a.txt");
// 完成对象序列化
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(p);
oos.close();
// 对象反序列化
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
Object obj = ois.readObject();
p = (Player)obj;
System.out.println(p);
}
}
package com.softeem.seri;
import java.io.Serializable;
import java.util.Date;
public class Player implements Serializable{
/**
* 序列号:在进行对象反序列化时判断并识别被反序列化对象是否是原对象
*/
private static final long serialVersionUID = 77545326076324329L;
private String nickName;
private int blood;
private int level;
private Date exitTime;
// 加上transient 瞬时态 不会被序列化
// 加上static 静态 不会被序列化
public Player() {
// TODO Auto-generated constructor stub
}
public Player(String nickName, int blood, int level, Date exitTime) {
super();
this.nickName = nickName;
this.blood = blood;
this.level = level;
this.exitTime = exitTime;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public int getBlood() {
return blood;
}
public void setBlood(int blood) {
this.blood = blood;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}package com.softeem.io.seri;
import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
public class User implements Externalizable{
private int uid;
private String username;
private String password; // 使用transient 关键字(瞬时态)不被序列化
public User() {
// TODO Auto-generated constructor stub
}
public User(int uid, String username, String password) {
super();
this.uid = uid;
this.username = username;
this.password = password;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [uid=" + uid + ", username=" + username + ", password=" + password + "]";
}
/**
* 通过实现该方法可以完成对指定属性值的序列化操作
*/
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeInt(uid);
out.writeUTF(username);
out.writeUTF(password);
}
/**
* 通过实现该方法可以完成对指定属性值的反序列化操作
*/
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
uid = in.readInt();
username = in.readUTF();
password = in.readUTF();
}
}
package com.softeem.io.seri;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class Test {
public static void main(String[] args) throws IOException, ClassNotFoundException {
User user = new User(1,"admin","123456");
File file = new File("src/userinfo");
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(user);
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
Object obj = ois.readObject();
System.out.println(obj);
}
}
IO流与对象序列化
本文介绍了Java中IO流的概念及分类,包括输入输出流、字节流与字符流的区别,以及节点流与处理流的作用。同时详细讲解了对象序列化的过程与实现方式。
95

被折叠的 条评论
为什么被折叠?



