字节流与字符流的区别
- 输入流
InputStream类是字节输入流的抽象类,是所有字节输入流的父类。InputStream类的具体层次结构如下图所示。
![Image 1][]
该类中所有方法遇到错误时都会引发IOException异常。下面是该类中一些常用方法的简要说明。
read()方法:从输入流中读取数据的下一个字节。返回0到255范围内的int字节值。如果因为已经到达流末尾而没有可用的字节,则返回值-1。
read(byte[] b):从输入流中读入一定长度的字节,并以整数的形式返回字节数。
mark(int readlimit)方法:在输入流的当前位置放置一个标记,readlimit 参数告知此输入流在标记位置失效之前允许读取的字节数。
reset()方法:将输入指针返回到当前所做的标记处。
skip(long n)方法:跳过输入流上的n个字节并返回实际跳过的字节数。
markSupported()方法:如果当前流支持mark()/reset()操作就返回true.
close方法:关闭此输入流并释放与该流关联的所有系统资源。
并不是所有的InputStream类的子类都支持InputStream中定义的所有方法。例如skip()、mark()和reset()等方法,这些方法就只对某些子类有用。
由于Java中的字符是Unicode编码,是双字节的,而InputStream是用来处理字节的,在处理字符文本时不是很方便。为此Java为字符文本的输入提供了一套专门的Reader类。
但Reader类并不是InputStream类的替换者,只是在处理字符串时简化了编程。Java中的字符流是用于对文本文件进行读写操作的流,不能对图片、声音等二进制文件进行读写操作。Java中的字节流则可以对图片、声音等二进制文件进行读写操作;因为Java中的字符使用的是Unicode编码,是双字节的,而字节流是用来处理字节的,因此对文本文件的操作不是挺好。Reader类是字符输入流的抽象类,所有字符输入流的实现都是它的子类,Reader类的具体层次结构如下所示。
![Image 1][]
Reader类中的方法与InputStream类中的方法类似,在需要时可查看JDK的API文档。
- 输出流
OutputStream类是字节输出流的抽象类,是表示输出字节流的所有类的超类。OutputStream类的具体层次如下图所示
![Image 1][]
OutputStream类中的所有方法均返回void,在遇到错误时会引发IOException异常。下面是对OutputStream类中常用方法的简单介绍。
write(int b)方法:将指定的字节写入此输出流。
write(byte[] b)方法:将b.length个字节从指定的byte数组写入此输出流。
write(byte[] b , int off , int len)方法:将指定byte数组中从偏移量off开始的len个字节写入此输出流。
flush()方法:彻底完成输出并清空缓存区。
close()方法:关闭输出流。
Writer类是字符输出流的抽象类,所有字符输出流类的实现都是它的子类,Writer类的层次结构如下图所示
![Image 1][]
下面给出两个实例看一下
使用字符流对文件进行读写操作:
public class ReaderAndWriterDemo {
public static void main(String[] args) throws Exception {
String value = “中国人”;
// 向文件中写入内容
PrintWriter pw = new PrintWriter(“temp.txt”, “UTF-8”);
pw.write(value);
pw.close();
// 从文件中读取内容
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(“temp.txt”), “UTF-8”));
String myStr = br.readLine();
br.close();
System.out.println(myStr);
}
}
使用字节流对文件进行读写操作:
public class ByteStreamDemo {
public static void main(String[] args) throws Exception {
String value = “中国人”;
// 向文件中写入内容
FileOutputStream fos = new FileOutputStream(“temp.txt”);
fos.write(value.getBytes(“UTF-8”));
fos.close();
// 从文件中读取内容
FileInputStream fis = new FileInputStream(“temp.txt”);
byte[] buf = new byte[1024];
int len = fis.read(buf);
String myStr = new String(buf, 0, len, “UTF-8”);
System.out.println(myStr);
}
}
[Image 1]:
还没有评论,来说两句吧...