您的位置:首页 > 编程语言 > MATLAB

在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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java 文件读写