码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2014-11-19 14:16:37      阅读:2317      评论:0      收藏:0      [点我收藏+]

标签:字节流   字符流   io流   inputstream   outputstream   

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 !




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

标签:字节流   字符流   io流   inputstream   outputstream   

原文地址:http://blog.csdn.net/fengshizty/article/details/41245129

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!