String s = "";
DataInputStream di2 = new DataInputStream(
new FileInputStream("datatest.txt"));
while( ( s=di2.readUTF() )!=null )
System.out.println( s );
数据读完后结束时抛出异常
请问原因? 
另外readUTF如何判断读取到结尾?谢谢~

解决方案 »

  1.   

    读入一个已使用 UTF-8 修改版格式编码的字符串。readUTF 的常规协定是:该方法读取使用 UTF-8 修改版格式编码的 Unicode 字符串的表示形式;然后以 String 的形式返回此字符串。    首先读取两个字节,并使用它们构造一个无符号 16 位整数,构造方式与 readUnsignedShort 方法的方式完全相同。该整数值被称为 UTF 长度,它指定要读取的额外字节数。然后成组地将这些字节转换为字符。每组的长度根据该组第一个字节的值计算。紧跟在某个组后面的字节(如果有)是下一组的第一个字节。    如果组的第一个字节与位模式 0xxxxxxx(其中 x 表示“可能为 0 或 1”)匹配,则该组只有这一个字节。该字节被左侧补零,转换成一个字符。    如果组的第一个字节与位模式 110xxxxx 匹配,则该组只由字节 a 和另一个字节 b 组成。如果没有字节 b(因为字节 a 是要读取的最后一个字节),或者字节 b 与位模式 10xxxxxx 不匹配,则抛出 UTFDataFormatException。否则,将该组转换成字符:    (char)(((a& 0x1F) << 6) | (b & 0x3F))
             如果组的第一个字节与位模式 1110xxxx 匹配,则该组由字节 a 和另外两个字节 b 和 c 组成。如果没有字节 c(因为字节 a 是要读取的最后两个字节之一),或者字节 b 或字节 c 与位模式 10xxxxxx 不匹配,则抛出 UTFDataFormatException。否则,将该组转换成字符:
         (char)(((a & 0x0F) << 12) | ((b & 0x3F) << 6) | (c & 0x3F))
             如果组的第一个字节与模式 1111xxxx 或模式 10xxxxxx 匹配,则抛出 UTFDataFormatException。    如果在执行整个过程中的任意时间遇到文件末尾,则抛出 EOFException。    在通过此过程将每个组转换成字符后,按照从输入流中读取相应组的顺序,将这些字符收集在一起,形成一个 String,然后该字符串将被返回。    可以使用 DataOutput 接口的 writeUTF 方法写入适合此方法读取的数据。    返回:
            一个 Unicode 字符串。 
        抛出:
            EOFException - 如果此流在读取所有字节之前到达末尾。 
            IOException - 如果发生 I/O 错误。 
            UTFDataFormatException - 如果这些字节不表示一个有效的、UTF-8 修改版编码的字符串。
      

  2.   

    用EOFException判断文件结束 ?
      

  3.   

    EOFException - 如果此输入流在读取所有字节之前到达末尾。 
      

  4.   

    import java.io.*;public class Test3 { 
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    try {
    RandomAccessFile fi = new RandomAccessFile("bb.txt", "rw");
    String str = null;
    while((str=DataInputStream.readUTF( fi )) != null )
    System.out.println( "reading from bb  " + str ); 
    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }bb.txt是 UTF-8 编码始终在:
    while((str=DataInputStream.readUTF( fi )) != null )跳出异常 ,请问原因,
    bb.txt文件 中如下内容 :
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="description" content="谢谢各位
      

  5.   

    DataInputStream.readUTF你先要判断 到底还有几个字节可以读 才可以 调用啊
      

  6.   

    抛出: 
    EOFException - 如果此输入流在读取所有字节之前到达末尾。 
    IOException - 如果发生 I/O 错误。 
    UTFDataFormatException - 如果这些字节不表示一个有效的、UTF-8 修改版编码的字符串这三种异常 根据抛出的异常进行相应的处理
      

  7.   

    如果要读utf文件,不要用自带的readUTF, 不好用,特烂。自已写一个! private static String readUTF(String fn) throws Exception{
    File f = new File(fn);
    InputStreamReader  read = new InputStreamReader (new FileInputStream(f),"UTF-8");
    BufferedReader reader=new BufferedReader(read);
    String msg = "";
    String info = reader.readLine();
    msg  = info;   
    while(true){ 
    info  = reader.readLine();
    if(info==null) break; 
    msg =  msg + info; 

    return msg;

    }//fn 为要读取的文件