java IO ——字节流

Java字节流

包括:基类、文件流、过滤流、标准流、内存读写流、顺序输出流等 (向内存中写入就是输入流,从内存中写出就是输出流)

 

基类:InputStream OutputStream

 

字节流主要操作byte类型数据,以byte数组为准,java 中每一种字节流的基本功能依赖于基本类 InputStream Outputstream,他们是抽象类,不能直接使用。字节流能处理所有类型的数据(如图片、avi等)。

代码:

/**

 * InputStream 和 OutputStream 的应用  回显

 * */

public class byte_steam {

public void copy(InputStream in, OutputStream out) throws IOException{

byte[] a =new byte[2048];

   int len = in.read(a);

   

    while(len != -1){

    out.write(a);

    len = in.read(a);

    }

}

public static void main(String[] args)throws IOException {

byte_steam o = new byte_steam();

o.copy(System.in, System.out);

}

}

 

文件流:

I/O 处理中,最常见的就是对文件的操作。java.io 包中所提供的文件操作类包括:

 

1用于读写本地文件系统中的文件:FileInputStream FileOutputStream

2描述本地文件系统中的文件或目录:FileFileDescriptor FilenameFilter

3提供对本地文件系统中文件的随机访问支持:RandomAccessFile

 

/**

 * 文件流(将一个文件内容复制到另一个文件中)

 * */

public class byte_steam{

public static void main(String[] args) throws IOException{

File inFile = new File("F:\\eclipse_workspace\\Text\\Text\\src\\Laboratory_Building_example\\Infile.txt");

File outFile = new File("F:\\eclipse_workspace\\Text\\Text\\src\\Laboratory_Building_example\\outFile.txt");

FileInputStream fIn = new FileInputStream(inFile);

FileOutputStream fOut = new FileOutputStream(outFile);

int i;

while((i=fIn.read()) != -1){

fOut.write(i);

}

fIn.close();

fOut.close();

}

}

 

缓冲流

BufferedInputStream 的数据成员 buf 是一个位数组,默认为2048字节。当读取数据来源时例如文件,BufferedInputStream 会尽量将 buf 填满。当使用 read ()方法时,实际上是先读取 buf 中的数据,而不是直接对数据来源作读取。当 buf 中的数据不足时,BufferedInputStream 才会再实现给定的 InputStream 对象的 read() 方法,从指定的装置中提取数据。

 

BufferedOutputStream 的数据成员 buf 是一个位数组,默认为512字节。当使用 write() 方法写入数据时,实际上会先将数据写至 buf 中,当 buf 已满时才会实现给定的 OutputStream 对象的 write() 方法,将 buf 数据写至目的地,而不是每次都对目的地作写入的动作。对于 BufferedOutputStream,只有缓冲区满时,才会将数据真正送到输出流,但可以使用 flush() 方法人为地将尚未填满的缓冲区中的数据送出。

/**

 * 缓冲流 (在文件流的基础上进行)

 * */

public class byte_steam{

 

public static void main(String[] args) throws IOException{

File inFile = new File("F:\\eclipse_workspace\\Text\\Text\\src\\Laboratory_Building_example\\Infile.txt");

File outFile = new File("F:\\eclipse_workspace\\Text\\Text\\src\\Laboratory_Building_example\\outFile.txt");

FileInputStream fIn = new FileInputStream(inFile);

FileOutputStream fOut = new FileOutputStream(outFile);

BufferedInputStream bIn = new BufferedInputStream(fIn,256);

BufferedOutputStream bOut = new BufferedOutputStream(fOut,256);

int i;

while((i=bIn.read()) != -1){

bOut.write(i);

}

bIn.close();

bOut.close();

}

 

}

 

 

 

数据流: DataInputStream DataOutputStream

1:分别实现了 DataInput DataOutput 接口

2:提供字节流的读写手段同时( read(), readInt(), readByte()...; write(), writeChar(), writeBoolean()...以统一的形式向输入流中写入 booleanintlongdouble 等基本数据类型,并可以再次把基本数据类型的值读取回来。

3:数据流可以连接一个已经建立好的数据对象,例如网络连接、文件等

/**

 * 数据流

 */

public class byte_steam {

 

public static void main(String[] args) throws IOException {

File inFile = new File("F:\\eclipse_workspace\\Text\\Text\\src\\Laboratory_Building_example\\outFile.txt");

File outFile = new File("F:\\eclipse_workspace\\Text\\Text\\src\\Laboratory_Building_example\\outFile.txt");

 

FileInputStream fIn = new FileInputStream(inFile);

FileOutputStream fOut = new FileOutputStream(outFile);

 

DataInputStream dIn = new DataInputStream(fIn);

DataOutputStream dOut = new DataOutputStream(fOut);

 

dOut.writeInt(123);

dOut.writeFloat(0.123f);

dOut.writeBoolean(true);

dOut.writeChar('a');

dOut.close();

 

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

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

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

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

 

dIn.close();

 

}

 

}

 

 

标准流

 

语言包 java.lang 中的 System 类管理标准输入/输出流和错误流。

 

System.inInputStream 中继承而来,用于从标准输入设备中获取输入数据(通常是键盘)

 

System.outPrintStream 中继承而来,把输入送到缺省的显示设备(通常是显示器)

 

System.err也是从 PrintStream 中继承而来,把错误信息送到缺省的显示设备(通常是显示器)

 

 

内存读写流

 

为了支持在内存上的 I/Ojava.io 中提供了类:ByteArrayInputStreamByteArrayOutputStream StringBufferInputStream

 

ByteArrayInputStream 可以从指定的字节数组中读取数据

ByteArrayOutputStream 中提供了缓冲区可以存放数据(缓冲区大小可以在构造方法中设定,缺省为32),可以用 write() 方法向其中写入数据,然后用 toByteArray() 方法将缓冲区中的有效字节写到字节数组中去。size() 方法可以知道写入的字节数;reset() 可以丢弃所有内容。

StringBufferInputStream ByteArrayInputStream 相类似,不同点在于它是从字符缓冲区 StringBuffer 中读取16位的 Unicode 数据,而不是8位的字节数据(已被 StringReader 取代)

 

顺序输入流

java.io 中提供了类 SequenceInputStream,使应用程序可以将几个输入流顺序连接起来。顺序输入流提供了将多个不同的输入流统一为一个输入流的功能,这使得程序可能变得更加简洁。

/**
 * 顺序输入流
 * */
public class byte_steam {

	public static void main(String[] args) throws IOException {
		String s;
		File inFile = new File("F:\\eclipse_workspace\\Text\\Text\\src\\Laboratory_Building_example\\inFile.txt");
		File inFile2 = new File("F:\\eclipse_workspace\\Text\\Text\\src\\Laboratory_Building_example\\outFile.txt");

		FileInputStream fIn = new FileInputStream(inFile);
		FileInputStream fIn2 = new FileInputStream(inFile2);
		
  
		SequenceInputStream sf = new SequenceInputStream(fIn,fIn2);
		DataInputStream df = new DataInputStream(sf);
		 
		while((s = df.readLine())!= null){ //该方法已经过时
			System.out.println(s);
		}
		
		df.close();

	}

}

错误之处: 

DataInputStream 的readLine()已经过时  无法使用了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值