黑马程序员技术交流社区
标题:
关于输入流中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