文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Inputstream读取文件,使用read()方法,判断尾标..

Inputstream读取文件,使用read()方法,判断尾标..

时间:2010-08-06  来源:lvxinzhi

先看下面一段代码:

view plaincopy to clipboardprint?
//同过判断文件的结尾来读取文件  
import java.io.File;  
import java.io.InputStream;  
import java.io.FileInputStream;  
public class InputStreamDemo02  
{  
    public static void main(String args[]) throws Exception{  
        File f = new File("E:"+File.separator+"java2"+File.separator+"StreamDemo"+File.separator+"test.txt");  
        InputStream in = new FileInputStream(f);  
        byte b[] = new byte[1024];  
        int len = 0;  
        int temp=0;          //所有读取的内容都使用temp接收  
        while((temp=in.read())!=-1){    //当没有读取完时,继续读取  
            b[len]=(byte)temp;  
            len++;  
        }  
        in.close();  
        System.out.println(new String(b,0,len));  
    }  

//同过判断文件的结尾来读取文件
import java.io.File;
import java.io.InputStream;
import java.io.FileInputStream;
public class InputStreamDemo02
{
 public static void main(String args[]) throws Exception{
  File f = new File("E:"+File.separator+"java2"+File.separator+"StreamDemo"+File.separator+"test.txt");
  InputStream in = new FileInputStream(f);
  byte b[] = new byte[1024];
  int len = 0;
  int temp=0;          //所有读取的内容都使用temp接收
  while((temp=in.read())!=-1){    //当没有读取完时,继续读取
   b[len]=(byte)temp;
   len++;
  }
  in.close();
  System.out.println(new String(b,0,len));
 }
}

运行结果为:Hello,java

在此代码中如果我不使用temp进行接收每次读取的内容,而直接操作每次读取的内容会怎么样呢?看下面的代码:

view plaincopy to clipboardprint?
//同过判断文件的结尾来读取文件,不使用temp对读取的每个字节进行接收时,对比InputStreamDemo01.java  
import java.io.File;  
import java.io.InputStream;  
import java.io.FileInputStream;  
public class InputStreamDemo03  
{  
    public static void main(String args[]) throws Exception{  
        File f = new File("E:"+File.separator+"java2"+File.separator+"StreamDemo"+File.separator+"test.txt");  
        InputStream in = new FileInputStream(f);  
        byte b[] = new byte[1024];  
        int len = 0;  
        //int temp=0;  
        while((in.read())!=-1){    //当没有读取完时,继续读取  
            b[len]=(byte)in.read();       
            len++;  
        }  
        System.out.println(new String(b,0,len));  
    }  

//同过判断文件的结尾来读取文件,不使用temp对读取的每个字节进行接收时,对比InputStreamDemo01.java
import java.io.File;
import java.io.InputStream;
import java.io.FileInputStream;
public class InputStreamDemo03
{
 public static void main(String args[]) throws Exception{
  File f = new File("E:"+File.separator+"java2"+File.separator+"StreamDemo"+File.separator+"test.txt");
  InputStream in = new FileInputStream(f);
  byte b[] = new byte[1024];
  int len = 0;
  //int temp=0;
  while((in.read())!=-1){    //当没有读取完时,继续读取
   b[len]=(byte)in.read();    
   len++;
  }
  System.out.println(new String(b,0,len));
 }
}

运行结果为:el,aa

造成这一结果的原因是什么?

观察可以发现,运行结果是跳跃的,每一个内容与上一个内容都间隔了一个字符。再阅读代码发现:in.read()被调用的两次,所以原因也就出来了:原因是有两次调用in.read(),in.read()是读取下一字节,导致b[]中存储的是跳跃的,即每次存入其中的都与上一个内容相差一个字节。问题并不复杂,重要的是自己书写时可能会造成这样的错误,所以一定要使用temp对读取的内容进行接收,同时只操作temp。发现问题和解决问题时,细心耐心很重要。

 

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载