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
原文:http://blog.csdn.net/fengshizty/article/details/41245129