字节流和字符流的区别
字符流在进行输出的时候会使用缓冲区,而字节流不使用缓冲区。在关闭字符流的时候会强制的将缓冲区的内容进行输出,但如果不关闭流缓冲区的内容是无法输出的。
那么什么是缓冲区那?
如果一个程序频繁地操作一个资源(如文件或数据库),则性能会很低,此时为了提升性能,就可以将一部分数据暂时读入到内存的一块区域之中,以后直接从此区域中读取数据即可,因为读取内存速度会比较快,这样可以提升程序的性能。简单的理解就是缓冲区是一段特殊的内存。
在字符流的操作中,所有的字符都是在内存中形成的,在输出前会将所有的内容暂时保存在内存之中,所以使用了缓冲区暂存数据。
下面是将字节流转化为字符流输出的一段代码
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
public class StreamUtils {
public static String streamToString(InputStream in){
String result ="";
try{
//new 一个字节输出流的数组
ByteArrayOutputStream out = new ByteArrayOutputStream();
//[1]new 一个字节数组
byte[] buffer = new byte[1024];
int length = 0;
while ( (length = in.read(buffer)) !=-1) {
out.write(buffer, 0, length);
//[2]强制关闭缓冲区
out.flush();
}
result = out.toString();//[3]输出字符串
out.close();
}catch (Exception e) {
e.printStackTrace();
}
return result;
}
}