国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > 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);	}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泰州市| 墨脱县| 文登市| 姜堰市| 都江堰市| 琼结县| 武汉市| 红桥区| 自治县| 浮梁县| 云浮市| 红原县| 镇安县| 南城县| 徐汇区| 淮南市| 海宁市| 永春县| 灵寿县| 定安县| 金寨县| 江达县| 无为县| 富宁县| 郎溪县| 新巴尔虎右旗| 寿宁县| 彭阳县| 兰坪| 中江县| 额敏县| 长治县| 奉贤区| 淮滨县| 平原县| 丹阳市| 广丰县| 西盟| 芮城县| 临邑县| 临邑县|