黑马程序员技术交流社区
标题:
字符流转字节流?
[打印本页]
作者:
jagon
时间:
2014-3-14 18:06
标题:
字符流转字节流?
/*
将字符流转换成字节流:OutputStreamWriter
*/
import java.io.*;
class OutputStreamWriterDemo1
{
public static void main(String[] args) throws IOException
{
//获取键盘录入对象。
InputStream in = System.in;
//将字节流对象转成字符流对象,使用转换流。InputStreamReader,把字节流对象in传进去
InputStreamReader isr = new InputStreamReader(in); //对象in由字节流变成了字符流isr
//为了提高效率,将字符串进行缓冲区技术高效操作。使用BufferedReader
BufferedReader bufr = new BufferedReader(isr); //创建缓冲区对象,将字符流对象isr传入
OutputStream out = System.out; //创建一个输出流对象out,已经是屏幕输出,所以不用再写输出语句
OutputStreamWriter osw = new OutputStreamWriter(out); //对象out由字符流变成了字节流osw
BufferedWriter bufw = new BufferedWriter(osw); //创建缓冲区对象,将字节流对象osw传入
String line = null;
while((line=bufr.readLine())!=null)
{
if("over".equals(line))
break;
bufw.write(line.toUpperCase());
bufw.newLine(); //进行换行操作
bufw.flush(); //将缓冲区数据进行刷新操作
}
bufr.close(); //关闭缓冲区资源
}
}
问题:
请看一下我红色部分的注释对吗?为什么要把字符流转换成字节流,不是输出吗?输出的话,又不是存储,只有存储的时候才把字符流转换成字节流,我怎么越想越糊涂,谁能帮我解释一下啊!多谢指教!
作者:
daoyua
时间:
2014-3-14 18:07
错了,是字节流转为字符流
作者:
jagon
时间:
2014-3-14 18:45
daoyua 发表于 2014-3-14 18:07
错了,是字节流转为字符流
哈哈,我想明白了,System.out ,就是一个输出流,但是每次只能输出一个字节,而这个OutputStreamWriter,就是对System.out这个输出流进行了包装,使其功能增强,这样一次就可以输出一行数据,哎呀,总算迷过来了,多谢啊!
作者:
jagon
时间:
2014-3-14 18:46
正确的理解应该是这样的:
/*
将字符流转换成字节流:OutputStreamWriter
*/
import java.io.*;
class OutputStreamWriterDemo1
{
public static void main(String[] args) throws IOException
{
//获取键盘录入对象。
InputStream in = System.in;
//将字节流对象转成字符流对象,使用转换流。InputStreamReader,把字节流对象in传进去
InputStreamReader isr = new InputStreamReader(in); //对象in由字节流变成了字符流isr
//为了提高效率,将字符串进行缓冲区技术高效操作。使用BufferedReader
BufferedReader bufr = new BufferedReader(isr); //创建缓冲区对象,将字符流对象isr传入
OutputStream out = System.out; //创建一个输出流对象out,已经是屏幕输出,所以不用再写输出语句
OutputStreamWriter osw = new OutputStreamWriter(out); //新建一个转换流(对out对象进行包装,osw是字符流)
BufferedWriter bufw = new BufferedWriter(osw); //创建缓冲区对象,将字符流对象osw传入
String line = null;
while((line=bufr.readLine())!=null)
{
if("over".equals(line))
break;
bufw.write(line.toUpperCase()); //将每行字符串(字符流)转换成字节(字节流),并变成大写
bufw.newLine(); //进行换行操作
bufw.flush(); //将缓冲区数据进行刷新操作,输出结果
}
bufr.close(); //关闭缓冲区资源
}
}
/*
(1)类 InputStreamReader:将字节流转换成字符流,是字节流通向字符流的桥梁;
构造方法:InputStreamReader(InputStream in)
创建一个使用默认字符集的 InputStreamReader。
(2)类OutputStreamWriter:将字符流转换成字节流,是子字符流通向字节流的桥梁;
构造方法:OutputStreamWriter(OutputStream out)
创建使用默认字符编码的 OutputStreamWriter。
理解:实质上OutputStreamWriter就是一个转换流(将字符流转换成字节流),就是对输出流System.in的一个包装,
System.in 一次只能读一个字节,而进行包装之后,一次可以读一行,非常方便;
(3)system.in是输出流
system.out是输出流
(4)PrintStream是OutputStream的子类,可以使用父类接收子类对象;
(5)理解:字符转字节
我们往文件中录入的都是字符,但写入文件的字符都是以字节的形式存在的,即录入的是字符,但在硬盘上保存的是字节,这就是
字符转字节;
(6)录入和输出的数据都要是字节流,缓冲区存储的可以是字符流;
(7)本例实质上就是自己定义了一个输出的操作方法;
*/
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2