dundun163 2009-10-26 18:32 采纳率: 0%
浏览 230
已采纳

请教大文件读写问题

有一个6M的二进制文件,都是float型,有300000个数

for(int i=0; i<300000; i++)
xxx[i] = xxx.readFloat();
需要读好几分钟

但是用c
fread(xxx, 4, 300000, fp);
只要两三秒就好了

请问Java有什么好的读取方法没,谢谢
[b]问题补充:[/b]
回答请讲得具体点
不要只说用buffer,我只知道那个读进来的是byte,而我要的是float

  • 写回答

3条回答 默认 最新

  • rednaxelafx 2009-10-28 22:03
    关注

    [code="java"]import java.io.*;

    public class z {
    public static void main(String[] args) throws Throwable {
    String path = "d:/somefile.dat";
    DataInputStream dis = new DataInputStream(
    new BufferedInputStream(
    new FileInputStream(path),
    6 * 1024 * 1024 // 6M buffer size
    )
    );
    float[] arr = new float[300000];
    for (int i = 0; i < arr.length; i++) {
    arr[i] = dis.readFloat();
    }
    dis.close();
    }
    }[/code]
    例如说这样读就应该比楼主直接用DataInputStream套在FileInputStream上要快些。不过最好不要真的设6M的buffer size,因为这种大数组会放在大对象堆里,要过比较久才被回收的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料