黑马程序员技术交流社区

标题: 关于输入流中read读取数据类型转换问题 [打印本页]

作者: 何明辉    时间: 2012-7-31 15:03
标题: 关于输入流中read读取数据类型转换问题
本帖最后由 何明辉 于 2012-8-5 12:03 编辑

import java.io.*;
class ReadIn
{
    public static void main(String[] args)throws IOException
   {
      InputStream in=System.in;
      StringBuilder sb=new StringBuilder();
      while(true)
       {
          int ch=in.read();//程序读入的是一个字节流
          if(ch=='\r')
               continue;
         if(ch=='\n')
          {
                String s=sb.toString();
                if("over".equals(s))
                       break;
                System.out.println(s.toUpperCase());
            }
         else
               sb.append((char)ch);//将一个字节转换为字符,并存入容器中。
       }
   }
}
上面的程序中;in.read()为读取一个字节,而(char)ch做了强制转换,但是输入流是通过键盘输入的,当通过键盘输入对应的汉字时那不就破坏了有效数据吗,输出的就不会是汉字了吗,因为汉字是以两个字节存放,所以我认为上面不可以这样强制(虽然可以强制),有没有更好的办法


作者: 涂金哲    时间: 2012-7-31 15:51
import java.io.*;
class Test2
{
    public static void main(String[] args)throws IOException
   {
      BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
      BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out));
      String line=null;
      while((line=bufr.readLine())!=null)
       {
         
                if("over".equals(line))
                       break;
                bufw.write(line);
                bufw.newLine();
                bufw.flush();
       }
   }
}
这种的可以输入中文的
作者: 涂金哲    时间: 2012-7-31 18:10
涂金哲 发表于 2012-7-31 15:51
import java.io.*;
class Test2
{

Inputstream的read()方法没有读取字符的 强制转换只是为了显示易于阅读 汉字占用两个字节,录入就必须要用增强的方法了 我个人的观点 ,很抱歉
作者: hello world    时间: 2012-7-31 20:13
恩,输入汉字会破坏数据,汉字两个字节,你按一个字节读取再转换自然不能输出汉字,最好的办法就是把字节流包装成字符流了,那样子就可以输入汉字啦。或者你也可以按自己读取,就需要加以判断看输入的是一个字节还是两个字节,单字节的可以补一个字节那样子就可以都按照双字节转换了。
作者: 王峰    时间: 2012-7-31 21:50
用缓存区技术,如下,
BufferedReader temp=new BufferedReader(new InputStreamReader(System.in));
      BufferedWriter buffw=new BufferedWriter(new OutputStreamWriter(System.out));
      String line=null;
      while((line=temp.readLine())!=null)
       {
         
                if("over".equals(line))
                       break;
                bufw.write(line);
                bufw.newLine();
                bufw.flush();





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2