java Inputstreamreader.peek转InputStream

当前位置: >
> java学习札记:关于IO转换流InputStreamReader和OutputStreamWriter
java学习札记:关于IO转换流InputStreamReader和OutputStreamWriter
lostpen & at
java学习笔记:关于IO转换流InputStreamReader和OutputStreamWriter
  1 字节流InputStream
-&FileInputStreamOutputStream
-&FileOutputStream2 字符流Reader -& BufferedReader
-& LineNumberReader
-& InputStreamReader
-& FileReaderWriter -& BufferedWriter
-& OutputStreamWriter -& FileWriter============================================================由JDK的IO流继承结构我们看到FileInputStream和FileOutputStream是直接继承自字节流基类的而FileReader和FileWriter是继承自2个转换流,为什么会这样呢 很可能是因为FileReader和FileWriter都是对字符型文件的操作,而计算机处理的是字节数据,读取文件后要将字符对象转成字节对象,在写入到文件时时要将字节对象转成字符对象
[示例1]:按行读写控制台中的字符
import java.io.*;
class Demo
public static void main(String[] args)
throws IOException
readAndWriteCmd();
public static void readAndWriteCmd() throws IOException
//1.获取键盘输入的字节流对象
InputStream in = System.
//2.将字节流对象转成字符流对象,使用转换流InputStreamReader
InputStreamReader isr = new InputStreamReader(in);
//in字节流就变成isr字符流了
//3.为了提高效率,使用字符缓冲流BufferedReader
BufferedReader bufr = new BufferedReader(isr);
OutputStream output = System.
OutputStreamWriter osw = new OutputStreamWriter(output);
BufferedWriter bufw= new BufferedWriter(osw);
//因为要用到换行newLine()
//4.然后就可以使用BufferedReader的readLine方法一次读取一行,读了再写到cmd里
String lineStr=
while(true)
lineStr = bufr.readLine();
//读取我们从键盘输入到控制台的内容
if(lineStr!=null)
if(lineStr.equals("over"))
//输入over时结束
bufw.write(lineStr); //写到控制台
bufw.newLine();
//输出换行符,在windows里也可直接输出"\r\n"
bufw.flush();
//清空缓冲区,否则下一次输出时会重复输出
  ========================================================================================
将上个例子的输出设备改成硬盘文件
[示例2]:将键盘输入控制台的字符输出到文本文件
import java.io.*;
class Demo
public static void main(String[] args)
throws IOException
readAndWriteCmd();
public static void readAndWriteCmd() throws IOException
BufferedReader bufr= new BufferedReader(new InputStreamReader(System.in));
//BufferedWriter bufw= new BufferedWriter(new OutputStreamWriter(new FileOutputStream("c:\\out.txt")));
BufferedWriter bufw= new BufferedWriter(new FileWriter("c:\\out.txt"));
String lineStr=
while(true)
lineStr = bufr.readLine();
//读取我们从键盘输入到控制台的内容
if(lineStr!=null)
if(lineStr.equals("over"))
//输入over时结束
bufw.write(lineStr);
bufw.newLine();
//输出换行符,在windows里也可直接输出"\r\n"
bufw.flush();
//清空缓冲区,否则下一次输出时会重复输出
  当我们使用默认GBK编码保存文本时,下面2句代码其实是一样的效果,
  new OutputStreamWriter(new FileOutputStream("out.txt"))
  new FileWriter("out.txt")
  当要求保存为其他编码比如UTF-8时,就要这样写
  new OutputStreamWriter(new FileOutputStream("out.txt"),"UTF-8")
  而如果要读取一个UTF-8编码的文本文件时,同样的要用
  new InputStreamReader(new FileInputStream("in.txt"),"UTF-8");
  而不能用new FileWriter("in.txt")
  ============================================================================
  笔记补充:
  通过3个步骤来选择使用哪个流1.明确源和目的体系源:
输入流2个体系 InputStream
目的:输出流2个体系 OutputStream
Writer2.操作的数据是否是纯文本
(为什么要区分字节和字符呢 效率问题,还有就是类中独有的方法)
是:用字符流
不是:字节流
对于键盘:我们一般要处理的是键盘录入的字符,如果你非要处理字节也有可能的3.当体系明确后,再明确要使用哪个具体的类(或者说哪个对象)
通过设备来区分:
:内存.硬盘.键盘
2.目的设备:内存.硬盘.控制台 [针对示例2]:将键盘录入的字符数据,保存到硬盘文件中首先看:键盘录入!第一步:明确体系,键盘录入是源,用InputStream 或 Reader体系第二步:操作的是否是纯文本
键盘录入字符,所以是字符数据!用Reader第三步:使用哪个具体对象
我们知道键盘录入的对象使用System.in
这里我们可能有个问题要提出,
我们不是选择的Reader体系吗 而System.in是字节流啊!
System.in是java用来处理键盘录入的数据的,是处理的字节型数据没错,
但我们现在要处理的是字符问题,虽然字符本质上也是字节数据,但字符Reader体系
有它特有的方法并且处理字符时的高效便捷,所以我们才用Reader体系,
我们只要将获取的字节数据用Reader体系中的InputStreamReader转换一下就行了InputStreamReader isr = new InputStreamReader(System.in);另外:
需要提高效率吗
需要,而且还有个输出换行符方法BufferedReader bufr = new BufferedReader(isr);再来看:保存文件!第一步:明确体系,保存到硬盘是目的,是输出,用OutputStream或Writer第二步:操作的是否是文本
将字符写入到文件,是!用Writer字符流第三步:使用哪个具体对象
看设备,是硬盘,一个文件,使用FileWriterFileWriter fw = new FileWriter("b.txt");另外:
需要提高效率么 需要BufferedWriter bufw = new BufferedWriter(fw);
这里我们不需要再使用转换流OutputStreamWriter
因为我们用的BufferedWriter包装的FileWriter,而FileWriter是继承OutputStreamWriter
的,BufferedReader 在写数据的时候就是写的字节数据如果:
如果要求在保存文件时是使用指定的编码格式时,就要显式使用转换流OutputStreamWriter了
因为OutputStreamWriter的重载构造方法中有可以指定编码表名称的(默认编码表是GBK),
而其第一个参数又必须是字节输出流OutputStream, 而可以操作文件的字节输出流就是
FileOutputStream了.
需求:写入文本文件,编码格式是UTF-8BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutpunStream("a.txt"),"UTF-8"))而FileReader读取的是默认编码格式的文本文件,要读取UTF-8格式的文件,就要用到InputStreamReader
  &&&&&&&&&&&&&&&&&& :arrow[*][*]  引用[u][/u][i][/i][b][/b][img][/img][url][/url]:&& lostyan333 & &
& & (0)(0)   lostwayman & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&湘教QS2-164&&增值电信业务经营许可证湘B2-新手问 java中为什么inputstreamreader和buffered reader要配合着用_百度知道
新手问 java中为什么inputstreamreader和buffered reader要配合着用
我看到书中写的是InputStreamReader input=new InputStreamReader(System.in);BufferedReader br=new BufferedReader(input);...........String str=br.readLine();...........
提问者采纳
你好:这个问题很好嗯,一起研究研究嗯我看了下javaAPI帮助文档:是这样写的,希望可以帮到你,InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。 每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。 为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。例如:
BufferedReader in= new BufferedReader(new InputStreamReader(System.in));
其他类似问题
按默认排序
其他3条回答
首先,BufferedReader中封装了很多方法,如上面提到的readLine()再一个,实例一个BufferedReader,JDK提供的构造方法只能传递一个Reader进去,InputStreamReader是Reader的一个子类。所以要使用BufferedReader就必须传一个Reader(或子类)进去
楼上说了很多了 够了
来广州疯狂JAVA来学习
你也可以看看他们的课程都很好懂的
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
java InputStreamReader与OutputStreamWriter流读写图片失败,该解决
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 streamreader.peek 的文章

 

随机推荐