java IO基础,求大神快速解答 java 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 BufferedInputStream bis=new BufferedInputStream(System.in); int str; while((str=bis.read())!=-1) System.out.print((char)str); 你那样 是 读两个写一个 好不 。要读一个写一个。 while((str=bis.read())!=-1) System.out.print((char)str); 是因为int转化为char丢失2个字节码? str=bis.read() 读取了一个字节,System.out.println((char)bis.read())中读取的是第二个字节。故读取了两个字节,输出一个字节。 怎么就读两个写一个了?read是读一个字节啊! read()方法是读取缓冲区内容同时指针下移。举个例子,就是比如:int[] buffer = {1,2,3,4,5,6};假设现在读指针下标index是1,指向2这个值。如果read()一下,读指针后移,即index是2,返回结果3。你的代码中,每执行一次read()就会后移一位。执行两次当然少一半。while((str=bis.read())!=-1) System.out.print((char)bis.read());将你的print()参数改成(char)str 就可以了 read()方法是读取缓冲区内容同时指针下移。举个例子,就是比如:int[] buffer = {1,2,3,4,5,6};假设现在读指针下标index是1,指向2这个值。如果read()一下,读指针后移,即index是2,返回结果3。你的代码中,每执行一次read()就会后移一位。执行两次当然少一半。while((str=bis.read())!=-1) System.out.print((char)bis.read());将你的print()参数改成(char)str 就可以了标红的地方有误,不能说是缓存,而是流链路(chain),read()方法从流中读取后,就会有后续的字节抵达流入口。因java IO是阻塞式的。 package day3;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader; public class SystemIn { public static void main(String[] args) throws IOException{ /**BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); System.out.println(in.readLine());*/ BufferedInputStream bis=new BufferedInputStream(System.in); int str; //for(int i=0;i<bis.available();i++) for(;;) { int c = bis.read(); if(c != -1) { System.out.print(c); } else { break; } } } }这个代码就解决了你的问题了。 刚看了socket然后写了个本地聊天的窗口,出问题了求大神解决 帮忙写段正则表达式吧! 一个关于线程死锁的问题 为什么super不能这样用? 一个双端链表 log4j 初学者的一个小问题? 如何返回数据表内容,急! 网络上传输信息时怎么加密? 如何加载图片? 请求高手帮忙:为小弟指导一个“CS结构的聊天工具”的“重新启动C端通盘程序”的功能实现方法. 求大神看看子类继承父类调用构造器的错误
int str;
while((str=bis.read())!=-1)
System.out.print((char)str);
你那样 是 读两个写一个 好不 。
要读一个写一个。
System.out.print((char)str);
read()方法是读取缓冲区内容同时指针下移。举个例子,就是比如:
int[] buffer = {1,2,3,4,5,6};
假设现在读指针下标index是1,指向2这个值。如果read()一下,读指针后移,即index是2,返回结果3。你的代码中,每执行一次read()就会后移一位。执行两次当然少一半。while((str=bis.read())!=-1)
System.out.print((char)bis.read());将你的print()参数改成(char)str 就可以了
read()方法是读取缓冲区内容同时指针下移。举个例子,就是比如:
int[] buffer = {1,2,3,4,5,6};
假设现在读指针下标index是1,指向2这个值。如果read()一下,读指针后移,即index是2,返回结果3。你的代码中,每执行一次read()就会后移一位。执行两次当然少一半。while((str=bis.read())!=-1)
System.out.print((char)bis.read());将你的print()参数改成(char)str 就可以了标红的地方有误,不能说是缓存,而是流链路(chain),read()方法从流中读取后,就会有后续的字节抵达流入口。因java IO是阻塞式的。
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader; public class SystemIn {
public static void main(String[] args) throws IOException{
/**BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
System.out.println(in.readLine());*/
BufferedInputStream bis=new BufferedInputStream(System.in);
int str;
//for(int i=0;i<bis.available();i++)
for(;;)
{
int c = bis.read();
if(c != -1)
{
System.out.print(c);
}
else
{
break;
}
}
}
}这个代码就解决了你的问题了。