DataOuput中readDouble()的问题

转帖|其它|编辑:郝浩|2008-12-24 10:26:26.000|阅读 1144 次

概述:DataOuput中readDouble()的问题

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

文章关键字:|DataOuput|readDouble()|问题|数据|读取|打印|

题目要求:想文件t1.txt中写入double型的数据然后在从文件t1.txt中读出并打印。

这本来是很简单的一个程序,可是我在写的时候却遇到了问题。下面是我的代码:

import java.io.*;
class TestDataRead{
   public static void main(String[] args){
    
      DataInputStream dis = null;
      DataOutputStream dos = null;
     
      try{
         dos = new DataOutputStream(new FileOutputStream("t1.txt"));
         dis = new DataInputStream(new FileInputStream(“t1.txt"));
      }catch(FileNotFoundException e){
         System.out.println("文件打开失败");
         System.exit(-1);
      }
    
     double d;
   
     try{       
        for(int i=1; i<3; i++){
           dos.writeDouble((double)(i*10));//向文件中写入9个double型的数据
        }    
         dos.flush();
         dos.close();
        
        while((d=dis.readDouble()) != -1){ //开始从文件中读取数据
          
            System.out.println(d);  //打印出数据
         }
         dis.close();
      }catch(IOException e){
          System.out.println(e);
          e.printStackTrace();
          System.exit(-1);
      }
      }
}

程序结果:
         10.0
         20.0
         java.io.EOFException

这里抛出了一个例外。

查看API关于readDouble()方法的定义:

readDouble
public final double readDouble() throws IOException //参见DataInput的readDouble方法的常规协定。

从包含的输入流中读取此操作需要的字节。

指定者:接口 DataInput 中的 readDouble

返回:此输入流的下八个字节,将它们解释为一个 double。

抛出:

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

IOException - 该流已关闭并且包含的输入流在关闭后不支持读取操作,或者发生其他 I/O 错误。

可以看出若选择用readDouble()每次读出一个double数据,那么所有值都是有效的,所以不可再用返回值来侦测何时结束输入。相反,可用available()方法判断有多少字符可用。故将源代码中的红色部分代码用一下代码替换则可以的到预期效果。
 
   while(dis.available() != 0){
            d = dis.readDouble();
            System.out.println(d);
         }

dis.available()用来判断还有多少字符可供读入。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:DIY部落

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP