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条)

报告相同问题?

悬赏问题

  • ¥15 springboot 3.0 实现Security 6.x版本集成
  • ¥15 PHP-8.1 镜像无法用dockerfile里的CMD命令启动 只能进入容器启动,如何解决?(操作系统-ubuntu)
  • ¥15 请帮我解决一下下面六个代码
  • ¥15 关于资源监视工具的e-care有知道的嘛
  • ¥35 MIMO天线稀疏阵列排布问题
  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?
  • ¥15 win10权限管理,限制普通用户使用删除功能
  • ¥15 minnio内存占用过大,内存没被回收(Windows环境)