- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个二进制文件列表,我需要读取这些文件,然后将其存储到变量中。每个文件都是大量 double 的集合。这些文件是在linux下用C语言中的double类型的C程序保存的。现在,我想使用 Java 读取所有这些文件。这是您能实现的最快方法吗?在我的 PC 中,读取 10 个文件(每个文件 1.5 Mb,每个文件 194,672 个 double )并将它们存储到数组中需要 24 秒。我正在考虑使用某种类型的缓冲区,但我不确定是否应该留下一些字节......
int i;
int num_f = 10;
int num_d = 194672;
File folder = new File(route);
File[] listOfFiles = folder.listFiles();
float double_list[][] = new float[num_f][num_d];
for (int file = 0; file < listOfFiles.length; file++) {
if (listOfFiles[file].isFile()) {
try{
br = new DataInputStream(new FileInputStream(listOfFiles[file].getAbsolutePath()));
//We read all file
i = 0;
while(br.available() > 0) {
//I know that float != double but I don't think I will lose a huge precision
//as the double numbers stored are in a region [-5,5] and with this way I reduce
//the amount of memory needed. (float) is not cpu consuming (<1s).
double_list[file][i++] = (float) br.readDouble();
}
}
}catch (Exception e){
e.printStackTrace();
}finally {
try {
//Close file
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
最佳答案
最后,我可以在 Andreas 和这个网站 ( http://pulasthisupun.blogspot.com.es/2016/06/reading-and-writing-binary-files-in.html ) 的帮助下做到这一点(检查其他类型格式!)。对于字节顺序,默认选项是 BIG_ENDIAN 代码,但这样我就得到了无穷大数字等无意义的东西。尽管如此,通过 LITTLE_ENDIAN 我得到了正确的数字!不过,我将来必须做一些测试,以确保我不必从一开始就留出一些额外的字节......
顺便说一句,花费的时间:0.160048575s,还不错;)
int i;
int num_f = 10;
int num_d = 194672;
File folder = new File(route);
File[] listOfFiles = folder.listFiles();
float double_list[][] = new float[num_f][num_d];
for (int file = 0; file < listOfFiles.length; file++) {
if (listOfFiles[file].isFile()) {
try{
fc = (FileChannel) Files.newByteChannel(Paths.get(listOfFiles[file].getAbsolutePath()), StandardOpenOption.READ);
byteBuffer = ByteBuffer.allocate((int)fc.size());
byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
fc.read(byteBuffer);
byteBuffer.flip();
buffer = byteBuffer.asDoubleBuffer();
((DoubleBuffer)buffer).get(double_list[file]);
byteBuffer.clear();
fc.close();
}catch (Exception e){
e.printStackTrace();
}finally {
try {
//Close file
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
关于java - 这是读取充满 double 的二进制文件的好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44473506/
我有一个 Storm 拓扑,其中一个 bolt 应该与ElasticSearch交互。 public static Client client; public static Settings sett
我目前正在开发 LIMS。我需要检索与需要使用某种准备方法准备的实验室 sample 相关的信息。 (我对此进行了相当多的简化,因此对任何错误表示歉意。)我需要在查询结果中生成的列是: Sample
我必须以下文件夹结构: main - server -- server-module-1 --- a --- b --- c -- server-module-2 --- d --- e --- f
Tomcat 和我的自定义 JAAS LoginModule 运行良好,但每次我输入错误的凭据时,整个 LoginException 都会写入日志。根据定义,LoginModule 必须在身份验证失败
我一直在关注有关 iOS 开发的教程 - 特别是向下钻取 UITableViews。我建立了自己的自定义 plist,但我似乎无法让 DetailViewController 填充我的 plist 信
我对 QT 比较陌生。在我的代码中,我创建了一个 QTableWidget,遍历行并将单元格设置为 QLineEdits 和 QCheckBoxes。我想这样做,以便更改任何 QLineEdits 中
我刚开始使用 Chrome 的分析器。所以这可能是对我得到的结果的误解。 如果我打开 Chrome 分析器并拍摄以下网页的堆快照,我会注意到 obj3 的保留大小是 obj1 和 obj2 的保留大小
我正在尝试使用 Python 2.7 中的 BeautifulSoup 4 解析 youtube 评论。当我尝试播放任何 YouTube 视频时,我会收到充满 BOM 的文本,而不仅仅是在文件开头:
我有此消息的完整系统日志: mysqld[963]: 2016-10-23 20:54:14 140708269390592 [警告] 拒绝用户 ''@'localhost' 访问(使用密码:NO)
我有一个数组,里面装满了NSDictionaries。我想找到其中一本字典的 index,但我对这本字典的了解只是键 @"name"的 value。我该怎么做 ? 最佳答案 在 theArray 中查
我想在之前的div内容满了文字的时候显示div,然后继续用剩下的文字填充这个新的div。 我不知道怎么办。事实上,在下面的代码中我写道,div 是在单击按钮时显示的。我也无法设置上面解释的“填充操作”
这是发生了什么: 内部数据库内容:一个类有一个字符串属性,用于存储电话号码。这个数字是使用代码设置的 CFBridgingRelease(ABMultiValueCopyValueAtIndex(AB
我的 logcat 中收到了数千条以下警告消息,它挤掉了我实际要查找的消息: W/ActivityManager﹕ Wtf, activity ActivityRecord{4338cd90 u0 u
我尝试使用 mongoimport 在 mongodb 中导入单个 csv 文件,使用 mongoimport -d mydb -c things --type csv --file location
我的 Rails 开发日志中有大量这样的行: Started GET "/assets/services.css?body=1" for 127.0.0.1 at 2012-11-26 02:27:4
我在 Xcode 8/iOS 10/Swift 3 中遇到 Firebase 问题。试图让 Firebase Analytics 全部设置好。但是在 iOS10 中,控制台会记录来自 Firebase
我的 logcat 中充满了以下消息 - E/UsDebuggingManager( 476): java.io.IOException: Connection refused E/UsDebugg
总结 我有各种单节点 Kubernetes 集群,这些集群在累积约 300 个已完成的作业后变得不稳定。 例如,在一个集群中,有 303 个已完成的作业: root@xxxx:/home/xxxx#
我是一名优秀的程序员,十分优秀!