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); } }