java IO之字节流和字符流-OutputSteam和InputStream

java中的IO流分为字节流和字符流;每种流又分输入流和输出流。先来说一下输入流和输出流:输入输出是针对程序内存而言,那么输入就是向内存写入数据;输出就是从程序内存写出数据。   

字节流直接文件数据。

字符流则是通过字节写入到缓存,再通过缓存区操作数据。

字节流的父类为InputStream(输入流)和OutputStream(输出流)。

     IntputStream的直接子类有:AudioInputStream,ByteArrayInputStream,FileInputStream,FilterInputStream,InputStream,ObjectInputStream, PipedInputStream,  

                  SequenceInputStream, StringBufferInputStream

     OutputSteam的直接子类有:ByteArrayOutputStream,FileOutputStream,FilterOutputStream,ObjectOutputStream,OutputStream,PipedOutputStream

字符流的父类为Reader(输入流)和Writer(输出流)。

      Reader的直接子类有:BufferedReader,CharArrayReader,FilterReader,InputStreamReader,PipedReader,StringReader

      Writer的直接子类有:BufferedWriter,CharArrayWriter,FilterWriter,OutputStreamWriter,PipedWriter,PrintWriter, StringWriter


下面对字节流和字符流做详细的说明:

一、字节流

1 字节输出流:OutputStream

      OutputStream是IO包中字节输出流的最大父类,它是一个抽象类,实现了Closeable,Flushable接口,我们必须通过其子类实例化对象。

     主要有一下及一个方法:

     void  close() 关闭次输出流并释放相关的所有系统资源

     void   flush() 刷新此输出流并强制写出所有的缓冲的输出字节

     void   write(byte[] b) 将b.length个字节从指定的byte数组写入流

     void   write(byte[] b, int off, int len) 将指定byte数组中从偏移量off开始的len个字节写入输出流

      void   write(int b) 将指定的字节写入此输出流

讲一段数据写入到d盘test.txt中

package andy.io.test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

/** 
 * @author Zhang,Tianyou
 * @version 2014年11月18日 下午11:44:06
 */

public class OutputStreamTest {

	public static void main(String[] args) throws IOException {
		//将输入流写入此文件
		File file = new File("d:" + File.separator + "test.txt");

		OutputStream outputStream  = null;
		//使用子类实例化
		outputStream = new FileOutputStream(file, true);//文件的追加
		
		String str = "hello andy !";
		byte b[] = str.getBytes();
		
		//1 方法一
		
		 //outputStream.write(b);
		
		
		//2 方法二 
		  for (int i = 0; i < b.length; i++) {
			outputStream.write(b[i]);
		}
		
		
		 //3方法三
		//outputStream.write(b, 0, b.length);
		
		//写完一定要关闭输出流释放资源
		outputStream.close();
	}

}



2 字节输入流:InputStream

     InputStream是IO包中字节输入流的最大父类,它是一个抽象类,实现了Closeable,Flushable接口,也必须通过其子类实例化对象。

     主要有一下及一个方法:

     void  close() 关闭次输入流并释放相关的所有系统资源

     int  read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。

     void   read(byte[] b, int off, int len) 将输入流中最多 len 个数据字节读入 byte 数组。

     int   read()从输入流中读取数据的下一个字节。

package andy.io.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;


/**  
 * @author Zhang,Tianyou  
 * version:2014-11-19 上午11:40:24  
 * 
 *  
 */

public class InputStreamTest {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		// 读取d盘下test.txt的文件
		File file = new File("d:" +File.separator + "test.txt");
		// 通过FileInputStream 实例化
		
		InputStream inputStream = null;
		
		inputStream = new FileInputStream(file);
		
		//定义字节数组
		byte[] b = new byte[(int) file.length()];
		
		//第一种 
		//int len = inputStream.read(b);
		
		//第二种
		/*for (int i=0; i<b.length; i++) {
			b[i] = (byte) inputStream.read();
		}*/
		
		//第三种
		inputStream.read(b, 0, b.length);
		
		//关闭相应的流
		inputStream.close();

		System.out.println("test 内容为: " + new String(b));
	}

}


运行结果如下:

test 内容为: hello andy !


 二、 内存操作流

内存的读写流 ByteArrayInputStream 和 ByteArrayOutputStream。

ByteArrayInputStream主要完成将内容写入到内存中,而ByteArrayOutputStream的功能主要是将内存中的数据输出


写入内存: 数据------------------->ByteArrayInputStream--------------------------->内存

内存输出: 数据<------------------ByteArrayOutputStream<--------------------------内存



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值