Idiot's Note Six: I/O 保存和读取字节数据,以及BufferedOutputStream的用法

InputStream类操作的是字节数据(byte),不是字符(char),在ASC11中字符和字节数据对应为8为数据,java的字符为16位数据,Unicode字符集对应的是16位字节数据,java的整数为32位。

 

一:保存字节级数据

a.DataOutputStream类,向输出流中写个java基本类型,所写的是可以移植的,它们能用DataInputStream类读取。

 

b.FileOutputStream类 可以简单的向文件写入数据。

 

简单代码(保存):

package inAndoutStream;

import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class SimpleOutPutTest {
	public static void main(String[] args) {
		double pi=3.1415;
		int i= 10;
		boolean okay=true;
		char cc='j';
		String s="java C pascle";
		try {
			FileOutputStream fs_out=new FileOutputStream("sample.dat");
			DataOutputStream out=new DataOutputStream(fs_out);
			out.writeDouble(pi);
			out.writeInt(i);
			out.writeBoolean(okay);
			out.writeChar(cc);
			out.writeUTF(s);
			out.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

 

在代码中,FileOutputStream   fos= new FileOutputStream("Sample.dat"); ,是用来创建一个文件来保存数据;

 

Sample.dat <------ fs_out(FileOutputStream)<-------out(DataOutputStream)

 

二:读取字节级数据

a: DataInputStream

 

b: FileInputStream

 

简单代码(读取):

package inAndoutStream;

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class SimpleInputTest {
	public static void main(String[] args) {
		try {
			FileInputStream fis=new FileInputStream("sample.dat");
			DataInputStream dis=new DataInputStream(fis);
			double pi=dis.readDouble();
			int i=dis.readInt();
			boolean b=dis.readBoolean();
			char c=dis.readChar();
			String s=dis.readUTF();
			dis.close();
			System.out.println("pi= "+pi+", i= "+i);
			System.out.println("b= "+b);
			System.out.println("s= "+s);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

 

 

outprint:

写道
pi= 3.1415, i= 10
b= true
s= java C pascle

 

DataInputStream & DataOutputStream的作用一样,其的构造方法需要一个低层次的输入流对象作为参数,FileInputStream可以提供这个流的对象。

Sample.dat ------> fs_out(FileOutputStream)------->out(DataOutputStream)

 

三:BufferedOutputStream

 

bufferedOutputStream类增强了批量数据输出到另一个输出流的能力。当关闭时,如果缓存未满,就强迫将数据压入输出流中,所有关于输出流操作的方法都是自动进行缓存的。

 

以下是简单的代码对比:

   不用缓存:

package inAndoutStream;

import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class WriteUnbufferTest {
	public static void main(String[] args) {
		try {
			long start=System.currentTimeMillis();
			FileOutputStream pos= new FileOutputStream("Daniel.dat");
			DataOutputStream dos=new DataOutputStream(pos);
			for(int i=0;i<100000;i++){
				dos.writeDouble(Math.random());
			}
			dos.close();
			long stop=System.currentTimeMillis();
			System.out.println("Times  ="+(stop-start));
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

 

outprintln:

Times  =656

 

 有缓存:

package inAndoutStream;

import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class WriteBufferedTest {
	public static void main(String[] args) {
		try {
			long start=System.currentTimeMillis();
			FileOutputStream pos= new FileOutputStream("Daniel.dat");
			BufferedOutputStream bos=new BufferedOutputStream(pos);
			DataOutputStream dos=new DataOutputStream(bos);
			for(int i=0;i<100000;i++){
				dos.writeDouble(Math.random());
			}
			dos.close();
			long stop=System.currentTimeMillis();
			System.out.println("Times  ="+(stop-start));
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

 outpirnt:

Times  =94

 

Sample.dat ------> fos(FileOutputStream)----->bos(BufferedOutputStream) ------->dos(DataOutputStream)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值