1. java字符流读写数据
就是序列化和反序列化,就是将对象转化字符序列,将字符序列转为对象的过程
package com.tx.test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
public class test{
public static void main(String[] args) throws FileNotFoundException, IOException {
List<Student> list = new ArrayList<Student>();
list.add(new Student("as","男",14));
list.add(new Student("ass","男",18));
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("data/out.txt"));
//输出流保存的文件名为 my.out ;ObjectOutputStream能把Object输出成Byte流
oos.writeObject(list);
oos.close();//序列化完毕
System.out.println("序列化完毕");
//反序列化
ObjectInputStream oin = null;
oin = new ObjectInputStream(new FileInputStream("data/out.txt"));
List<Student> stulist = null;
try {
stulist = (List<Student>) oin.readObject();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
for(Student s : stulist) {
System.out.println(s.toString());
}
System.out.println("反序列化完成");
}
}
2. java io字符流和字节流的区别
一句话概括:字节流是由字节组成的回,字符流是由字符组成的.Java里字符由两个字节组成.
扩展:答字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的
但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化
实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。
3. java中有几种类型的流
Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,OutputStream,Reader,Writer。Java中其他多种多样变化的流均是由它们派生出来的.
字符流和字节流是根据处理数据的不同来区分的。字节流按照8位传输,字节流是最基本的,所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。
1.字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串;
2. 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。
读文本的时候用字符流,例如txt文件。读非文本文件的时候用字节流,例如mp3。理论上任何文件都能够用字节流读取,但当读取的是文本数据时,为了能还原成文本你必须再经过一个转换的工序,相对来说字符流就省了这个麻烦,可以有方法直接读取。
字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节, 操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!