有关IO流的其他常用流

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有关IO流的其他常用流相关的知识,希望对你有一定的参考价值。

操作基本数据类型的流、内存操作流、打印流、标准输入流和标准的输出流、随机访问流、合并流、序列化流/反序列化流、属性集合类

一、操作基本数据类型的流

DataInputStream :数据输入流

  DataOutputStream:数据输出流

可以操作一些基本数据类型

egg:

DataOutputStream dos = new DataOutputStream(new FileOutputStream("dos.txt"));

das.writeByte(10);

das.writeShort(100);

das.writeInt(1000);

das.writeLong(10000L);

das.writeFloat(12.34F);

das.writeDouble(12.56);

das.writeBoolean(true);

das.writeChar(‘A‘);

DataInputStream dis = new DataInputStream(new FileInputStream("das.txt"));

System.out.println(dis.readByte());

System.out.println(dis.readShort());

System.out.println(dis.readInt());

System.out.println(dis.readLong());

System.out.println(dis.readFloat());

System.out.println(dis.readDouble());

System.out.println(dis.readBoolean());

System.out.println(dis.readChar());

dos.close();

dis.close();

二、内存操作流

用来存储内存中的临时信息,程序结束,内存流消失

字节数组操作内存流:

ByteArrayInputStream

ByteArrayOutputStream

字符数组操作的内存流:

CharArrayReader

  CharArrayWriter

字符串操作的内存流:

StringReader

  StringWriter

egg:

ByteArrayOutputStream baos = new ByteArrayOutputStream();

baos.write("hello".getBytes());

byte[] bys = baos.toByteArray();

ByteArrayInputStream bais = new ByteArrayInputStream(bys);

int by=0;

while((by=bais.read())!= -1){

System.out.print((char)by);

}

该流的close方法没有任何的操作,该流可以不用关闭

三、打印流(只能写数据,不能读数据)

1、字节打印流:PrintStream

构造方法:

printStream ps = System.out;

写数据:

println()带换行

print()

System.out.println();

2、字符打印流:PrintWriter

egg:

PrintWriter pw = new PrintWriter("pt.txt") ;

pw.write("hello");

pw.flush(); 

pw.close();

字符打印流的一个构造方法:可以进行自动刷新

public PrintWriter(Writer out, boolean autoFlush)第二个参数的值为:true则自动刷新

egg:

PrintWriter pw = new PrintWriter(new FileWriter("pw2.txt"), true);

pw.println("hello"); //使用print()不换行写入操作

pw.close();

四、标准输入流和标准的输出流

1、System类中的字段

public static final InputStream in   标准输入流

InputStream in = System.in; 字节输入流

public static final PrintStream out  标准输出流

PrintStream out = System.out;:字节打印流

2、直接使用标准输入流录入数据

BufferedReader br = new BufferedReader(new OutputStreamReader(System.in));

//使用装换流将字节流装换为字符流传给字符缓冲流

System.out.println("请输入一个字符串:");

String line = br.readLine(); //录入数据

System.out.println(line);

br.close();

3、直接使用标准输出流输出数据

BufferedWriter bw = new BufferedWriter(new InputStreamWriter(System.out));

bw.write("hello");

bw.newLine();

bw.close();

五、随机访问流 —— RandomAccessFile(并不是实际意义的流)

类的实例支持对随机访问文件的读取和写入,融合了InputStream和OutputStream两个类

1、构造方法:

public RandomAccessFile(String name,String mode) mode:常用的就 rw:既可以读,也可以写

egg:

RandomAccessFile raf = new RandomAccessFile("raf.txt","rw");

raf.writeByte(97); 

raf.writeChar(‘A‘);

raf.writeUTF("中国");

System.out.println(raf.readByte());

System.out.println(raf.readChar());

System.out.println(raf.readUTF()); //读取一个字符串

raf.close();

2、特殊方法:

public long getFilePointer(),返回此文件的偏移量

//到此文件开头的偏移量(以字节为单位),在该位置发生下一个读取或写入操作。

六、合并流 —— SequenceInputStream(只能合并输入流)

1、构造方法:

public SequenceInputStream(InputStream s1,InputStream s2) 先读取 s1,然后读取 s2,将两个输入流合并

public SequenceInputStream(Enumeration<? extends InputStream> e)

//将多个输入流对象添加到Vector集合,通过v.elements()方法产生Enumeration对象传入合并流,使得多个输入流合并

2、将e:\\a.txt和b.txt复制到c.txt

技术分享

七、序列化流和反序列化流

1、概述

序列化流:ObjectOutputStream

将对象按照流的形式封装成流数据:对象--->流数据

反序列化流:ObjectInputStream

将流数据又封装成了一个对象: 流数据-->对象

2、实现方式:

类通过实现java.io.Serializable接口以启用其序列化功能,未实现此接口的类将无法使其任何状态序列化或反序列化。

Serializable接口中没有字段,构造方法,成员方法,所有如果一个接口中没有任何的方法或者他的字段,将这种接口叫标记接口!

1)该类实现Serializable接口

2)private static final long serialVersionUID = 1L; //给当前类定义一个ID

重写toString()方法

不然的话,在读数据过程中如果中途对类有所修改,会报java.io.InvalidClassException异常

注意:如果在一个类中,有时候为了让成员变量不被序列化,加一个关键字:transient

3)创建序列化流和反序列化流对象,创建需要序列化类的对象;

4)oos.writeObject(obj)写

5)ois.readObject()读

6)关闭所有的流

八、属性集合类 —— Properties

1、概述:

Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载

这个类是Hashtbale的子类,而Hashtable是Map下面的双列集合,所以,Properties使用put()方法,添加元素

且,没有泛型

2、特殊方法

public Object setProperty(String key,String value):和添加相关的

public Set<String> stringPropertyNames():获取所有的键的集合

public String getProperty(String key):获取指定的属性集合中的键的值

public void load(Reader reader):将文本文件的数据读取集合中

public void store(Writer writer, String comments):将集合中的数据保存到文本文件中

//comments:属性列表的描述


以上是关于有关IO流的其他常用流的主要内容,如果未能解决你的问题,请参考以下文章

Java流操作有关的类或接口:

io流

Java各种IO流的总结

IO流学习的总结

Java IO流学习

Java IO流学习总结