java中什么时候用到字符流?java 字节流 字符流,分别什么情况下使用
大家好,如果您还对java中什么时候用到字符流不太了解,没有关系,今天就由本站为大家分享java中什么时候用到字符流的知识,包括java 字节流 字符流,分别什么情况下使用的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!
Java常用的字符流类有哪些
字符流:
以Reader和Writer结尾的都是字符流,每次处理两个Unicode字节,Reader是输入流,Writer是输出流。常见的有FileReader,FileWriter;BufferReader,BufferWriter等,查看jdkapi文档就知道了。
字节流:
以OutputStream和InputStream结尾的流都是字节流,每次只能处理一个字节,在使用时常常在字节流上套上字符流或缓冲流或转换流等来方便对数据的处理。
java字节流和字符流的区别
字符流处理的单元为2个字节的unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,
操作字节和字节数组。所以字符流是由java虚拟机将字节转化为2个字节的unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是
音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点.
所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列.
字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串;
2.
字节流提供了处理任何类型的io操作的功能,但它不能直接处理unicode字符,而字符流就可以。
1. Java I/O中字符流和字节流的区别
字节流与和字符流的使用非常相似,但实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。
下面以两个写文件的操作为主进行比较,但是在操作时字节流和字符流的操作完成之后都不关闭输出流。
1、使用字节流不关闭执行
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.OutputStream;
publicclassOutputStreamDemo05{
publicstaticvoidmain(String[]args)throwsException{//异常抛出,不处理
//第1步:使用File类找到一个文件
Filef=newFile("d:"+File.separator+"test.txt");//声明File对象
//第2步:通过子类实例化父类对象
OutputStreamout=null;
//准备好一个输出的对象
out=newFileOutputStream(f);
//通过对象多态性进行实例化
//第3步:进行写操作
Stringstr="HelloWorld!!!";
//准备一个字符串
byteb[]=str.getBytes();
//字符串转byte数组
out.write(b);
//将内容输出
//第4步:关闭输出流
//out.close();
//此时没有关闭
}
}
打开文件会发现,此时没有关闭字节流操作,但是文件中也依然存在了输出的内容,证明字节流是直接操作文件本身的。而下面继续使用字符流完成,再观察效果。
2、使用字符流不关闭执行
packageorg.lxh.demo12.chariodemo;
importjava.io.File;
importjava.io.FileWriter;
importjava.io.Writer;
publicclassWriterDemo03{
publicstaticvoidmain(String[]args)throwsException{//异常抛出,不处理
//第1步:使用File类找到一个文件
Filef=newFile("d:"+File.separator+"test.txt");//声明File对象
//第2步:通过子类实例化父类对象
Writerout=null;
//准备好一个输出的对象
out=newFileWriter(f);
//通过对象多态性进行实例化
//第3步:进行写操作
Stringstr="HelloWorld!!!";
//准备一个字符串
out.write(str);
//将内容输出
//第4步:关闭输出流
//out.close();
//此时没有关闭
}
}
程序运行后会发现文件中没有任何内容,这是因为字符流操作时使用了缓冲区,而在关闭字符流时会强制性地将缓冲区中的内容进行输出,但是如果程序没有关闭,则缓冲区中的内容是无法输出的,所以得出结论:字符流使用了缓冲区,而字节流没有使用缓冲区。
如果想在不关闭时也可以将字符流的内容全部输出,则可以使用Writer类中的flush()方法完成。
importjava.io.File;
importjava.io.FileWriter;
importjava.io.Writer;
publicclassWriterDemo04{
publicstaticvoidmain(String[]args)throwsException{//异常抛出不处理
//第1步:使用File类找到一个文件
Filef=newFile("d:"+File.separator+"test.txt");//声明File
对象
//第2步:通过子类实例化父类对象
Writerout=null;
//准备好一个输出的对象
out=newFileWriter(f);
//通过对象多态性进行实例化
//第3步:进行写操作
Stringstr="HelloWorld!!!";
//准备一个字符串
out.write(str);
//将内容输出
out.flush();
//强制性清空缓冲区中的内容
//第4步:关闭输出流
//out.close();
//此时没有关闭
}
}
此时,文件中已经存在了内容,更进一步证明内容是保存在缓冲区的。这一点在读者日后的开发中要特别引起注意。
java 字节流 字符流,分别什么情况下使用
根据我在学习以及工作中的理解:
字节流可用于任何类型的对象,而字符流只能处理字符或者字符串,Unicode字符;
也就是说字节流可以读写所有的文件,而字符流只能读写文本文件。但是能用字符流的时候就不要用字节流,因为字符流的读写效率更高一些。
完毕!Thanks!
好了,文章到这里就结束啦,如果本次分享的java中什么时候用到字符流和java 字节流 字符流,分别什么情况下使用问题对您有所帮助,还望关注下本站哦!