------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
IO流三.
一.序列流
1.序列流可以把多个字节输入流整合成一个,从序列流中读取数据时,将从被整合的第一个流开始读,读完之后继续读第二个,以此类推.
2.sis在关闭的时候,会将构造方法中传入的流对象也都关闭.
二.序列流整合多个
FIS fis1;
FIS fis2;
FIS fis3;
Vector<FileInputStream> v=new Vector<>();
v.add(fis1);
v.add(fis2);
v.add(fis3);
Enumeration<FileInputStream> en=v.elements
SequenceInputStream sis=new SIS(en);
FileOutputStream fos=new FOS("copy");
int b;
while( (b=sis.read()) != -1){
fos.write(b);
}
sis.close();
fos.close();
三.内存输出流
1.内存输出流可以向内存中写数据,把内存当做一个缓冲区,写出之后可以一次性获取所有数据.
2.使用方式:
创建对象:new ByteArrayOutputStream();
写出数据:write(int); write(byte[]);
获取数据:toByteArray();
3.代码:
FIS fis=new FIS("a1.txt");
ByteArrayOutputStream baos=new ByteArrayOutputStream();
int b;
while( (b=fis.read()) != -1){
baos.write(b);
}
byte[] arr=baos.toByteArray();
sysout(new String(arr));
fis.close();
四.内存输出流面试题
1.定义一个文件输入流,调用read(byte[] b)方法,将a.txt文件中的内容打印出来(byte数组大小限制为5);
2.代码:
FIS fis=new FIS("a1.txt");
ByteArrayOutputStream baos=new ByteArrayOutputStream();
byte[] arr=new byte[5];
int len;
while( (len=fis.read(arr)) != -1){
baos.write(arr,0,len);
}
sysout(baos);
fis.close();
五.对象操作流ObjectOutputStream
1.对象操作流可以将一个对象写出,或者读取一个对象到程序中,也就是执行了序列化和反序列化的操作.
2.代码:
Person p1=new Person("a1",23);
Person p2=new Person("a2",24);
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("a.txt"));
oos.writeObject(p1);
oos.writeObject(p2);
oos.close();
六.对象操作了ObjectInputStream
代码:
ObjectInputStream ois=new ObjectInputStream(new FileInputStream("a.txt"));
Person p1=(Person)ois.readObject();
Person p2=(Person)ois.readObject();
sysout(p1);
sysout(p2);
ois.close();
七.对象操作流优化
将对象存储在集合中写出
Person p1=new Person("a1",21);
Person p2=new Person("a2",22);
Person p3=new Person("a3",23);
Person p4=new Person("a4",24);
ArrayList<Person> list=new ArrayList<>();
list.add(p1);
list.add(p2);
list.add(p3);
list.add(p4);
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("a.txt");
oos.writeObject(list);
oos.close();
读取到的是一个集合对象
ObjectInputStream ois=new ObjectInputStream(new FileInputStream("a.txt"));
ArrayList<Person> list=(ArrayList<Person>)ois.readObject();
for(Person p:list){
sysout(p);
}
ois.close();
八.加上ID号
1.要写出的对象必须实现Serializable接口才能被序列化.
2.不是必须加ID号
九.打印流
1.打印流可以很方便的将对象的toString()结果输出,并且自动加上换行,而且可以使用自动刷出的模式
2.System.out就是一个printStream,其默认向控制台输出信息
3.使用方式
打印:print() println()
自动刷出:PrintWriter(OutputStream out,boolean autoFlush,String encoding)
打印流只操作数据目的
十.标准输入输出流和输出语句
1.
System.in是InputStream,标准输入流,默认可以从键盘输入读取字节数据
System.out是printStream标准输出流,默认可以向Console中输出字符和字节数据.
2.修改标准输入输出流
修改输入流:
System.setIn(InputStream)
修改输出流:
System.setOut(PrintStream)
System.setIn(new FileInputStream("a.txt"))
System.setOut(new PrintStream("b.txt");
InputStream in=System.in;
PrintStream ps=System.out;
int b;
while( (b=in.read()) != -1){
ps.write(b);
}
in.close();
ps.close();
十一.两种方式实现键盘录入
1.BufferedReader的readLine方法
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String line=br.readLine();
br.close();
2.Scanner
Scanner sc=new Scanner(System.in);
String line=sc.nextLine();
sc.close();
十一.修改标准输入输出流拷贝图片
System.setIn(new FileInputStream("IO图片.png"));
System.setOut(new PrintStream("copy.png"))
InputStream is=System.in;
PrintStream ps=System.out;
int len;
byte[] arr=new byte[1024*8];
while( (len=is.read(arr)) != -1){
ps.write(arr,0,len);
}
is.close();
ps.close();
十二.随机访问流
1.随机访问流
RandomAccessFile
RandomAccessFile类不属于流,是Object的子类,但它融合了InputStream和OutputStream的功能
支持对随机访问文件的读取和写入.
十三.数据输入输出流
1.
DataInputStream,DataOutputStream可以按照基本数据类型大小读写数据
2.例如按Long大小写出一个数字,写出时该数据占8字节,读取的时候也可以按照Long类型读取,一次读取8个字节.
DataOutputStream dos = new DataOutputStream(new FileOutputStream("b.txt"));
dos.writeInt(997);
dos.writeInt(998);
dos.writeInt(999);
dos.close();
DataInputStream dis = new DataInputStream(new FileInputStream("b.txt"));
int x = dis.readInt();
int y = dis.readInt();
int z = dis.readInt();
System.out.println(x);
System.out.println(y);
System.out.println(z);
dis.close();
十四.Properties
1.Properties是双列集合.父类是Hashtable
为什么没有泛型?
因为Properties有自己的固定作用,是当做配置文件,存储信息,都是以键值对的形式存在,都是以字符串的形式存储,都是String所以不加泛型.
十五.Properties的特殊功能
1.public Object setProperty(String key,String value)
2.public String getProperty(String key)
3.public Enumeration stringPropertyNames()
也就是存键值对,取值和迭代
十六.Properties的load()和store()功能
1.配置文件要跟程序有所关联,是通过IO流和程序相关联.也就是通过load()和store()两个方法
本文深入探讨Java中的序列流与内存输出流的概念、使用方法及面试题解析,包括序列流整合多个输入流、内存输出流向内存写数据、序列化与反序列化操作、对象操作流的应用、优化策略及键盘录入方式。
117

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



