在Java中如何读取用MATLAB的fwrite()函数写入文件的数据
2017-03-05 11:59
701 查看
1 问题描述
今天编程的时候遇到一个问题 先前用MATLAB生成了一个数据文件使用MATLAB的原因是MATLAB能够很快地对算法进行实现 效率较高
但是这个数据文件需要在Android程序中使用
也就是说 需要用Java读取文件中的数据
对我而言 我感觉这是一个比较复杂的问题 还是需要记录一下
2 致谢
感谢网友Defonds提供的资料链接如下:http://blog.csdn.net/defonds/article/details/8782785
3 解决方案
3.1 明确文件的编码方式
对于文件的读写操作来说 首先需要明确的就是文件的编码方式常见的编码格式有两种 文本格式 和
二进制格式
首先需要明确所操作的文件是什么格式
由于我的文件是在MATLAB中用fwrite()函数生成的 fwrite()的作用是向二进制文件中写入数据
所以这里我们的编码格式是二进制格式
3.2 明确小端模式和大端模式
这里的小端模式和大端模式指的是 数据中高低字节的存放模式大端模式:低字节存放在高地址位
小端模式:低字节存放在低地址位
我们使用的是Windows系统 经测试
使用的是小端模式
3.3 明确数据类型的字节数
基本的数据类型有double int long 这几种关于不同编程语言基本类型字节数的信息可以在百度上查到 这里就不赘述了
举例说明 这里我们使用的是int型
int型在MATLAB和Java中都是4字节 也就是32位
3.4* 基本函数的使用
这里当时出现了一个问题,我当时想,是否能直接使用DataInputStream类的readInt()函数直接进行读取呢,回答是不行的,
我当时尝试了一下,读出来的结果很奇怪,
经过测试 我发现:
DataInputStream类的readInt()函数默认是大端编码的
而这里我在写入文件时 使用的是小端编码
所以不能直接使用Java提供的库函数
3.4 编程实现
我们再来明确一下我们的问题:现有一个二进制文件,存储有以小端模式存储的int整数型数据。
我们需要用文件流的形式将其读出,具体来说就是byte[]数组的形式读取出来,
也就是说,需要将byte[]数组转换为int型数据。
基本的算法思想可以参考我的一篇博客:http://blog.csdn.net/songyuc/article/details/51013325
这里我再进行一下说明
算法的思想如下:
1.用“& 0xFF”进行“位清理”
(注意位清理的时候 0xFF同样需要进行相应的移位操作
具体的实现可以参考我的“代码实现”)
2.根据大端小端模式,使用“<<”运算将字节移动到相应的位置;
3.用“|”操作进行合并
4.重复上述过程
具体代码实现如下:
private final static int INT_SIZE = 4; private static int readInt(DataInputStream dis) { byte bytes[] = new byte[INT_SIZE]; try { dis.read(bytes, 0, INT_SIZE); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return bytes2Int(bytes); }
相关文章推荐
- MATLAB: 如何读取txt中的文件 如何将数据批量写入数据 文件名递增
- Java web中,当表单含有文件上传时,提交数据的如何读取
- Matlab中如何读取TXT数据文件[转载]
- matlab中如何读取TXT数据文件中指定行的数据?
- Java中,当表单含有文件上传时,提交数据的如何读取
- java中如何获取远程计算机post提交的数据并把这些数据写入本地的txt文件中
- java读写properties文件,解决系统找不到指定路径,解决写入后读取正常,但文件数据未更新问题
- Java, 如何从Excel中读取数据到文件中
- matlab中如何读取TXT数据文件
- java 从控制台读取数据,文件的读取与写入
- Java从.CSV文件中读取数据和写入
- matlab如何导入csv文件及matlab支持的数据格式,相应函数
- Java中,当表单含有文件上传时,提交数据的如何读取
- Java 使用DataInputStream将数据写入文件,使用FileReader读取演示
- Java中,当表单含有文件上传时,提交数据的如何读取
- java:大数据文件写入,读取,分割,排序,合并
- Java从.CSV文件中读取数据和写入
- 如何使用JavaExcel(jxl)读取一个文件并写入一个新文件
- Java中,当表单含有文件上传时,提交数据的如何读取 .
- 用java代码实现从excel表格读取数据然后写入生成国际化配置文件properties