首页 > 编程 > Java > 正文

在Java中如何读取用MATLAB的fwrite()函数写入文件的数据

2019-11-06 07:17:59
字体:
来源:转载
供稿:网友

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);	}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表