Topic: 求教输入流问题

  Print this page

1.求教输入流问题 Copy to clipboard
Posted by: 白天ling
Posted on: 2005-05-21 00:04

package filetest;
import java.io.*;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright Coffee 2005</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/

public class FilePutStream {

public static void main(String[] args) {
try{
File f = new File("temp.txt");
if(!f.exists()){
f.createNewFile();
}
/**
* BufferedOutputStrean Demo
*/
FileOutputStream fous = new FileOutputStreamRose;
String outString =new String("abcdee");
BufferedOutputStream bps = new BufferedOutputStream(fous);
bps.write(outString.getBytes());
bps.flush();
System.out.println("文件已经写入");
fous.close();
bps.close();
/**
* BufferedInputStrean Demo
*/
FileInputStream fis = new FileInputStreamRose;
BufferedInputStream bis = new BufferedInputStream(fis);

byte bArry[] = new byte[bis.available()];
bis.read(bArry);
String rStr = new String(bArry);
System.out.println(rStr);
/*for(int i = 0 ; i < bis.available(); i++){
System.out.println((char)bis.read());
}*/
bis.close();
fis.close();
}
catch(Exception ept){
System.out.println(ept.getMessage());
}
}
}

  byte bArry[] = new byte[bis.available()];
bis.read(bArry);
String rStr = new String(bArry);
System.out.println(rStr);
改为
   /*for(int i = 0 ; i < bis.available(); i++){
System.out.println((char)bis.read());
}*/
只能输出 abc三个数 
不知道是什么原因?  

2.Re:求教输入流问题 [Re: 白天ling] Copy to clipboard
Posted by: 8166680
Posted on: 2005-05-23 02:37

byte bArry[] = new byte[bis.available()];
bis.read(bArry);
String rStr = new String(bArry);
System.out.println(rStr);

一般都是用这种方法

你下面这种我没用过。试了一下。只有abc ,问题出在bis.available()上
我估计了一下。 public synchronized int available() throws IOException
这个方法的返回值是:
从当前输入流中可无阻塞读取的字节数。
如果用在FOR语句中和 i 比较的话就转换成int型。你本来有6个字节。那就是3了
所以只输出了3个字符.我把你的字符串改成8个就输出4个。改成10个就只输出5个

楼主要是有更好的解释请在后面贴出来。互相学习

3.Re:求教输入流问题 [Re: 白天ling] Copy to clipboard
Posted by: 白天ling
Posted on: 2005-05-23 16:08

 原因在于 for(int i = 0 ; i < bis.available(); i++) 里面,不能用 bis.available()作为判断条件,因为没读一次bis.available()的值就会减1,所以只运行3次,改为下面的就对了
int size = bis.available();
for(int i = 0 ; i < size ; i++){
// System.out.println(bis.available());
System.out.println((char)bis.read());
//System.out.println(bis.available());
}

4.Re:求教输入流问题 [Re: 白天ling] Copy to clipboard
Posted by: 8166680
Posted on: 2005-05-23 23:51

爽。学到点东东


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923