dundun163 2009-10-26 10: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 14: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条)
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部