系统运维系列 之其它流概述及其分类(java应用)
Posted 琅晓琳
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了系统运维系列 之其它流概述及其分类(java应用)相关的知识,希望对你有一定的参考价值。
1 前言
本篇博客沿着上一篇博客中I/O流的内容,继续补充其它流的含义和应用。
2 主要内容
2.1 数据输入输出流:DataInputStream/DataOutputStream
以上两种流可以按照基本数据类型大小读写数据,如按照Long大小写出一个数字,写出时占用8字节,读取的时候也可以按照Long类型读取,一次8字节。
public static void main(String[] args) throws IOException{
DataOutputStream dos = new DataOutputStream(new FileOutputStream("ABC.txt"));
dos.writeInt(997);
dos.close();
DataInputStream dis = new DataInputStream(new FileOutputStream("ABC.txt"));
int x = dis.readInt();
System.out.println(x);
}
2.2 打印流:PrintWriter—>字符流/PrintStream—>字节流
该流可以很方便的将对象toString()结果输出,并且自动加上换行,而且可以使用自动刷出模式。
PrintWriter(OutputStream out,boolean autoFlush,String encoding)
举例:
public static void main(String[] args) throws IOException{
PrintWriter pw = new PrintWriter(new FileOutputStream("ABC.txt"),true);
//可以自动刷出
pw.println(97);
//以下两种写法无法自动刷出
pw.print(97);
pw.write(97);
}
//补充:
//System.in是InputStream的标准输入流,可以从键盘上输入读取的字节数据;
//System.out是PrintStream的标准输出流,可以向控制台中输出字符和字节。
//举例:
public static void main(String[] args) throws IOException{
System.setIn(new FileInputStream("ABC.txt"));
System.setOut(new PrintStream("AB.txt"));
InputStream in = System.in;
PrintStream ps = System.out;
int b;
while((b = in.read())!=-1){
ps.write(b);
}
in.close();
ps.close();
}
2.3 对象流:ObjectInputStream/ObjectOutputStream
可以将一个对象写出,或者读取一个对象到程序中,也就是执行序列化和反序列化的操作。
public static void main(String[] args) throws IOException{
//序列化
Person p1 = new Person("AB",23);
Person p2 = new Person("CD",26);
ArrayList<Person>list = new ArrayList<>();
list.add(p1);
list.add(p2);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("ABC.txt"));
oos.writeObject(list);
oos.close();
//反序列化
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("ABC.txt"));
ArrayList<Person>list = (ArrayList<Person>)ois.readObject();
for(Person p : list){
System.out.println(p);
}
ois.close();
}
2.4 序列流:SequenceInputStream
可以把多个字节输入流整合成一个序列,从序列中读取数据时将从被整合的第一个流开始读取,读完一个之后继续读取第二个,以此类推。
Vector<FileInputStream> v = new Vector<>();
v.add(new FileInputStream("ABC.txt"));
v.add(new FileInputStream("DEF.txt"));
Enumeration<FileInputStream>en = v.elements();
SequenceInputStream sis = new SequenceInputStream(en);
2.5 内存输出流:ByteArrayOutputStream
该输出流可以向内存中写数据,把内存当作一个缓冲区,写出之后可以一次性取出所有数据。
public static void main(String[] args) throws IOException{
FileInputStream fis = new FileInputStream("ABC.txt");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[]arr = new byte[1024];
int b;
while((b=fis.read()) != -1){
baos.write(arr,0,b);
}
System.out.println(baos.toString());
fis.close();
}
以上是关于系统运维系列 之其它流概述及其分类(java应用)的主要内容,如果未能解决你的问题,请参考以下文章