输入流整合+序列化&反序列化

//整合两个输入流
FileInputStream fis1 = new FileInputStream("a.txt");
FileInputStream fis2 = new FileInputStream("b.txt");
SequenceInputStream sis = new SequenceInputStream(fis1, fis2);
FileOutputStream fos = new FileOutputStream("c.txt");        
int b;
while((b = sis.read()) != -1) {
    fos.write(b);
}





//整合多个输入流
FileInputStream fis1 = new FileInputStream("a.txt");
FileInputStream fis2 = new FileInputStream("b.txt");
FileInputStream fis3 = new FileInputStream("c.txt");            
Vector<FileInputStream> v = new Vector<>();            //创建集合对象
v.add(fis1);                            //将流对象存储进来
v.add(fis2);
v.add(fis3);            
Enumeration<FileInputStream> en = v.elements();
SequenceInputStream sis = new SequenceInputStream(en);        //将枚举中的输入流整合成一个
FileOutputStream fos = new FileOutputStream("d.txt");        
int b;
while((b = sis.read()) != -1) {
    fos.write(b);
}





FileInputStream fis = new FileInputStream("e.txt");
ByteArrayOutputStream baos = new ByteArrayOutputStream();    //在内存中创建了可以增长的内存数组            
int b;
while((b = fis.read()) != -1) {
    baos.write(b);                        //将读取到的数据逐个写到内存中
}
System.out.println(baos.toString());                //将缓冲区的内容转换为了字符串,在输出语句中可以省略调用toString方法




//序列化:将对象写到文件上
Person p1 = new Person("张三", 23);
Person p2 = new Person("李四", 24);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("e.txt"));
oos.writeObject(p1);
oos.writeObject(p2);





//把整个集合对象一次写入
Person p1 = new Person("张三", 23);
Person p2 = new Person("李四", 24);
Person p3 = new Person("王五", 25);
Person p4 = new Person("赵六", 26);        
ArrayList<Person> list = new ArrayList<>();
list.add(p1);
list.add(p2);
list.add(p3);
list.add(p4);        
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("e.txt"));
oos.writeObject(list);




//对象输入流,反序列化
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("e.txt"));        
Person p1 = (Person) ois.readObject();
Person p2 = (Person) ois.readObject();
//Person p3 = (Person) ois.readObject();            //当文件读取到了末尾时仍要读取时出现EOFException    
System.out.println(p1);
System.out.println(p2);




//把整个集合对象一次写出
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("e.txt"));
ArrayList<Person> list = (ArrayList<Person>) ois.readObject();        //将集合对象一次读取    
for (Person person : list) {
    System.out.println(person);
}




拓展:
--------------------------------------------------------------------------------
PrintStream ps = System.out;            //获取字节输出流
ps.println(97);                    //底层通过Integer.toString()将97转换成字符串并打印
ps.write(97);                    //查找码表,找到对应的a并打印





PrintWriter pw = new PrintWriter(new FileOutputStream("f.txt"),true);//获取字符输出流
pw.write(97);
pw.print(97);




InputStream is = System.in;            //获取标准输入流
int x = is.read();                //读取一个字符,转换为int型
System.out.println(x);
is.close();                    //如果不和文件关联,输入流只有一个,关闭了就算换个对象名也无法使用




System.setIn(new FileInputStream("a.txt"));            //改变标准输入流
System.setOut(new PrintStream("b.txt"));            //改变标注输出流
InputStream is = System.in;                    //获取标准的键盘输入流,默认指向键盘,改变后指向文件
PrintStream ps = System.out;                    //获取标准输出流,默认指向的是控制台,改变后就指向文件
int b;
while((b = is.read()) != -1) {                    //等同于文件内容的拷贝
    ps.write(b);
}





BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//InputStreamReader转换流
String line = br.readLine();                         //获取字符串并输出
System.out.println(line);
br.close();




RandomAccessFile raf = new RandomAccessFile("g.txt", "rw");    //用于读写文件
raf.write(97);                            //写文件
int x = raf.read();                        //读文件
raf.seek(0);                            //在指定位置设置指针




Properties prop = new Properties();            //Properties是双列集合,是Hashtable的子类
prop.put("abc", 123);                    //与map类的方法一样
System.out.println(prop);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值