标签:字节流 字符流 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