对象流:ObjectInputStream、ObjectOutputStream
用于存储和读取基本数据类型数据或对象的处理流,强大之处在于把java中的对象写入到数据源,并能把对象中数据源还原回来
还原原理:序列化:用ObjectOutputStream类保存基本类型数据或对象的机制
反序列化:用ObjectInputStream类读取基本数据类型或对象的机制
/**
* 对象流的使用
* 1.ObjectInputStream和ObjectOutputStream
* 2.作用:用于存储和读取基本数据类型或对象的处理流。
*
* 序列化过程,将内存中的java对象保存到磁盘中或通过网络传输出去
* 使用ObjectOutputStream实现
*
* 反序列化过程:将磁盘中文件的对象还原回为内存中的java对象
* 使用ObjectInputStream实现
*/
@Test
public void testObjectOutputStream() {
ObjectOutputStream oos = null;
try {
// 把数据写入到磁盘中
oos = new ObjectOutputStream(new FileOutputStream("readme1.text"));
oos.writeObject(new String("我爱北京*"));
oos.flush();//刷新操作
oos.writeObject(new Person(18,"luck"));
oos.flush();//刷新操作
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (oos != null) {
oos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Test
public void testObjectInputStream() {
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new FileInputStream("readme1.text"));
Object obj = ois.readObject();
String str = (String) obj;
Person person= (Person) ois.readObject();
System.out.println(str);
System.out.println(person);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
}
try {
if (ois != null) {
ois.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
*Person需要满足如下的要求,方可序列化
* 1,需要实现接口:Serializable
* 2.当前类提供一个全局常量:seriaLVersionUID
* 注意:static、transient修饰的成员变量不能序列化。
*/
class Person implements Serializable{
private static final long serialVersionUID = 6728326784846016375L;
private int age;
private String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
字符编码
常见编码表:ASCII:美国标准信息交换码,用一个字节的7位来表示
ISO8859-1:拉丁码表、欧洲码表,用一个字节的8位表示
GB2312:中国的中文编码表,最多两个字节编码所有字符
GBK:中国的中文编码表升级,融合更多中文字符,最多两个字节编码
Unicode(16进制):国际标准码,涵盖目前人类所有字符,所有文字都用2个字节表示
UTF-8(2进制):变长的编码方式,可用1-4个字节表示字符,兼容ASCII
NIO
java1.4版本开始引入java NIO替代标准的java IOAPI,拥有同样的作用,但方式完全不同。NIO支持面向缓冲区的(IO是面向流的)、基于通道的IO操作,更加高效的读写文件
java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套是网络编程NIO