麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Java中的Big/Little問題

2019-11-18 14:29:53
字體:
供稿:網(wǎng)友

  java中的Big/Little問題
1. 解決Endian問題:一個(gè)總結(jié)
Java二進(jìn)制文件中的所有東西都以big-endian形式存在,高字節(jié)優(yōu)先,這有時(shí)被稱為網(wǎng)絡(luò)順序。這是一個(gè)好的消息,意味著假如你只使用Java。所有文件在所有平臺(tái)(Mac,PC,Solaris等)上按同樣的方式進(jìn)行處理。可以自由地交換二進(jìn)制數(shù)據(jù),以電子形式在Internet上,或在軟盤上,而無需考慮endian問題。存在的問題是當(dāng)你與那些不是使用Java編寫的程序交換數(shù)據(jù)文件時(shí),會(huì)存在一些問題。因?yàn)檫@些程序使用的是little-endian順序,通常是在PC上使用的C語言。有些平臺(tái)內(nèi)部使用big-endian字節(jié)順序(Mac,IBM390);有些平臺(tái)使用little-endian字節(jié)順序(Intel)。Java對(duì)用戶隱瞞了endian問題。

在二進(jìn)制文件中,在域之間沒有分割符,文件是二進(jìn)制形式的,不可讀的ASCII。假如你想讀的數(shù)據(jù)不是標(biāo)準(zhǔn)格式,通常由非Java程序預(yù)備的??梢杂伤姆N選擇:

1). 重寫提供輸入文件的輸出程序。它可以直接輸出big-endian字節(jié)流DataOutputStream或者字符DataOutputSream格式。

2). 寫一個(gè)獨(dú)立的翻譯程序,讀和排列字節(jié)??梢杂萌魏握Z言編寫。

3). 以字節(jié)形式讀數(shù)據(jù),并重新安排它們(on the fly)。

4). 最簡單的方式是,使用我編寫的LEDataInputStream, LEDataOutputStream 和LERandomaccessFile模擬 DataInputStream, DataOutputStream and RandomAccessFile ,它們使用的是little-endian字節(jié)流。 You can read about LEDataStream. You can download the code and source free. You can get help from the File I/O Amanuensis to show you how to use the classes. Just tell it you have little-endian binary data.

2.你可能甚至不會(huì)有任何問題。
從C來的許多Java新手可能會(huì)認(rèn)為需要考慮它們所依靠的平臺(tái)內(nèi)部所使用的是big還是little問題。在Java中這不是一個(gè)問題。進(jìn)一步,不借助于本地類,你無法知道它們是如何存儲(chǔ)的。Java has no strUCt I/O and no unions or any of the other endian-sensitive language constructs.

僅在與遺留的C/C++應(yīng)用程序通訊時(shí)需要考慮endian問題。下列代碼在big or little endian機(jī)器上都將產(chǎn)生同樣的結(jié)果:

// take 16-bit short apart into two 8-bit bytes.
short x = 0xabcd;
byte high = (byte) (x >>> 8);
byte low = (byte) x;/* cast implies & 0xff */
System.out.PRintln ("x=" + x + " high=" + high + " low=" + low );

3.讀Little-Endian Binary Files
The most common problem is dealing with files stored in little-endian format.

I had to implement routines parallel to those in java.io.DataInputStream which reads raw binary, in my LEDataInputStream and LEDataOutputStream classes. Don't confuse this with the io.DataInput human-readable character-based file-interchange format.

If you wanted to do it yourself, without the overhead of the full LEDataInputStream and LEDataOutputStream classes, here is the basic technique:

Presuming your integers are in 2's complement little-endian format, shorts are pretty easy to handle:


--------------------------------------------------------------------------------

short readShortLittleEndian( )

{
// 2 bytes
int low = readByte() & 0xff;
int high = readByte() & 0xff;
return (short )(high << 8 low);

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产精品中文在线 | 97人人草 | 日韩精品中文字幕一区二区 | 精品国产一区二区三区四区阿崩 | 日本在线高清 | 亚洲最大av网站 | 国产精品免费久久久久 | 自拍偷拍999 | 99精品国产一区二区三区 | 久久激情免费视频 | 亚洲精品一区中文字幕 | xxxx欧美视频 | 国产精品午夜未成人免费观看 | 国产高清一区 | 亚洲第一黄色网 | 视频一区国产精品 | 欧美日韩高清不卡 | 天天操综| 欧美成人精品欧美一级 | 中文字幕在线观看亚洲 | 国产成人高清成人av片在线看 | 国产精品av久久久久久网址 | 免费黄色小视频网站 | 国产一级二级视频 | 人人看人人舔 | 日产精品久久久一区二区开放时间 | 国产18成人免费视频 | 亚洲成人在线免费观看 | 欧美 日本 在线 | 国产亚洲精品久久久闺蜜 | 日本一区视频在线观看 | 精品成人免费视频 | 国产一区二区免费 | 欧美性色大片 | 久久久久av69精品 | 精品国产96亚洲一区二区三区 | 中国女警察一级毛片视频 | 亚洲一级电影在线观看 | 中文字幕亚洲视频 | 福利在线小视频 | www.xxx视频|