最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JAVA讀取二進制文件以及畫圖教程

 更新時間:2023年07月12日 09:38:43   作者:這個人太懶了  
由于項目需要,需要對二進制文件進行讀取,所以這篇文章主要給大家介紹了關(guān)于JAVA讀取二進制文件以及畫圖的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

0 引言

最近老師讓寫一個程序,作為學(xué)習(xí)JAVA的練習(xí)。目的在于:將一個二進制文件中的數(shù)據(jù)讀取出來,其中數(shù)據(jù)包括點的位置信息和壓力值及狀態(tài)。將這些數(shù)據(jù)畫作圖像的形式展示。

本小程序分為以下幾部分:

(1)讀取二進制文件;其中需要考慮二進制文件讀出來的是十進制數(shù),需要將二個字節(jié)合成一個short型,并轉(zhuǎn)換為int型值。

(2)畫圖;根據(jù)讀取到的點的信息,循環(huán),如果狀態(tài)是畫,則將該點與上一點相連;

1 讀取二進制文件

所有的輸入流類都是抽象類InputStream或Reader的子類。本文主要使用其中的FilterInputStream子類中的DataInputStream和BufferedInputStream這兩個子類。

1.1 DataInputStream

構(gòu)造函數(shù)為:

DataInputStream(InputStream in)
Creates a DataInputStream that uses the specified underlying InputStream.

使用基礎(chǔ)類InputStream構(gòu)造DataInputStream

方法主要有,見下表

本文使用readFully(byte[] b)方法讀取所有的字節(jié)信息。

代碼示例如下:

DataInputStream dis = null;
dis = new DataInputStream(new FileInputStream ("./test.txt"));
byte []b = new byte [1024];
dis.read(b);

文件的所有信息都會存儲在定義的byte數(shù)組中。

1.2 BufferedInputStream

構(gòu)造函數(shù)如下:

BufferedInputStream(InputStream in)
Creates a BufferedInputStream and saves its argument, the input stream in, for later use.
BufferedInputStream(InputStream in, int size)
Creates a BufferedInputStream with the specified buffer size, and saves its argument, the input stream in, for later use.

方法主要有,見下表

主要使用read(byte [], off, len)方法讀取文件信息。方法available()返回文件的字節(jié)數(shù);

示例代碼如下:

BUfferedInputStream bis = null;
bis = new BufferedInputStream(new fileInputStream("./test.txt"));
int len = bis.available();
byte []b = new byte[len];
bis.read(b, 0, len);

byte數(shù)組中將存放文件的所有信息。

1.3 處理數(shù)據(jù)

根據(jù)以上兩種方法獲取了數(shù)據(jù),接下來將對數(shù)據(jù)轉(zhuǎn)換成int型。

由于buff數(shù)組中存放的是一個字節(jié)一個字節(jié)的,故將兩個字節(jié)組合即可。

代碼如下:

int x = (buff[0] & 0xff) | (buff[1] & 0xff) << 8;
int y = (buff[2] & 0xff) | (buff[3] & 0xff) << 8;

以上是小端模式(低地址中存放的是字數(shù)據(jù)的低字節(jié),高地址存放的是字數(shù)據(jù)的高字節(jié))的轉(zhuǎn)換,大端(與小端相反)的話直接調(diào)換一下就行。

2 畫圖

采用Graphics2D進行畫圖,使用BufferedImage創(chuàng)建畫,并通過方法getGraphics()返回2D圖像。

 // create a BufferedImage with the size of (width, height)
        BufferedImage bufferedImage = new BufferedImage(width, height,                 
        BufferedImage.TYPE_INT_RGB);
        // to draw strokes, we need a Graphics2D - correlated with BufferedImage
        Graphics2D graphics2D = (Graphics2D) bufferedImage.getGraphics();
        // set the background to be WHITE
        graphics2D.setBackground(Color.WHITE);
        graphics2D.clearRect(0, 0, width, height);
        // set width and color for lines
        graphics2D.setPaint(Color.BLACK);
        graphics2D.setStroke(new BasicStroke(3));

2.1 將所有點連接成線

判斷該點的狀態(tài)是否是畫,及下一個點是否是畫,然后再連線

int pos;
        boolean bDrawing = false;
        int xPrev=-1, yPrev=-1;
        for( pos = 4; pos + 7 <= nLength ; pos += 7)
        {
            byte status = buffer[pos];
            int x = ((buffer[pos+1]&0xff) | ((buffer[pos+2]&0xff) << 8)) / 10;
            int y = ((buffer[pos+3]&0xff) | ((buffer[pos+4]&0xff) << 8)) / 10;
            if( bDrawing ) {
                if(status == 0x11) {
                    graphics2D.drawLine(xPrev, yPrev, x, y);
                    xPrev = x;
                    yPrev = y;
                }
                else {
                    bDrawing = false;
                }
            }
            else {
                if(status == 0x11) {
                    bDrawing = true;
                    xPrev = x;
                    yPrev = y;
                }
                else {
                    // floating
                }
            }
        }

3 結(jié)果

4 總結(jié)

任重而道遠,老師還是最牛逼的!

到此這篇關(guān)于JAVA讀取二進制文件以及畫圖的文章就介紹到這了,更多相關(guān)JAVA讀取二進制文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java編程實現(xiàn)調(diào)用com操作Word方法實例代碼

    Java編程實現(xiàn)調(diào)用com操作Word方法實例代碼

    這篇文章主要介紹了Java編程實現(xiàn)調(diào)用com操作Word方法實例代碼,代碼注釋很詳細,在這里分給大家,需要的朋友可以參考下。
    2017-09-09
  • 簡單理解Spring之IOC和AOP及代碼示例

    簡單理解Spring之IOC和AOP及代碼示例

    這篇文章主要介紹了簡單理解Spring之IOC和AOP及代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-12-12
  • SpringBoot+Ant Design Vue實現(xiàn)數(shù)據(jù)導(dǎo)出功能方式

    SpringBoot+Ant Design Vue實現(xiàn)數(shù)據(jù)導(dǎo)出功能方式

    這篇文章主要介紹了SpringBoot+Ant Design Vue實現(xiàn)數(shù)據(jù)導(dǎo)出功能方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • mybatis-plus中wrapper的用法實例詳解

    mybatis-plus中wrapper的用法實例詳解

    本文給大家介紹了mybatis-plus中wrapper的用法,包括條件構(gòu)造器關(guān)系、項目實例及具體使用操作,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-02-02
  • 在SpringBoot中定義和讀取自定義配置的方法步驟

    在SpringBoot中定義和讀取自定義配置的方法步驟

    在Spring Boot中定義和讀取自定義配置是日常開發(fā)中常見的需求,它允許我們以靈活的方式管理應(yīng)用的配置信息,無論是通過外部配置文件還是通過環(huán)境變量,本文是一個詳細的步驟說明,包括示例代碼,需要的朋友可以參考下
    2024-10-10
  • idea運行java的配置詳細教程(包含maven,mysql下載配置)

    idea運行java的配置詳細教程(包含maven,mysql下載配置)

    程序員們在開發(fā)的時候,一定會用到Intellij?IDEA這個集成開發(fā)環(huán)境,這篇文章主要給大家介紹了關(guān)于idea運行java的配置(包含maven,mysql下載配置)的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • 使用Java實現(xiàn)在Excel中創(chuàng)建下拉列表

    使用Java實現(xiàn)在Excel中創(chuàng)建下拉列表

    下拉列表(下拉框)可以確保用戶僅從預(yù)先給定的選項中進行選擇,這樣不僅能減少數(shù)據(jù)輸入錯誤,還能節(jié)省時間提高效率,下面我們就來看看如何在java中利用免費庫實現(xiàn)創(chuàng)建下拉列表吧
    2024-03-03
  • 關(guān)于maven下載慢的問題

    關(guān)于maven下載慢的問題

    這篇文章主要介紹了關(guān)于maven下載慢的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Java使用BigDecimal進行運算封裝的實際案例

    Java使用BigDecimal進行運算封裝的實際案例

    今天小編就為大家分享一篇關(guān)于Java使用BigDecimal進行運算封裝的實際案例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 通過Jenv管理多JDK版本的詳細介紹

    通過Jenv管理多JDK版本的詳細介紹

    jenv是一個用于管理?Java?環(huán)境的工具,它允許用戶在不同的Java版本之間輕松切換,這篇文章主要介紹了通過Jenv管理多JDK版本的詳細介紹,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2026-05-05

最新評論

大理市| 阜南县| 鲁甸县| 横山县| 错那县| 西盟| 肃宁县| 博乐市| 商都县| 卓尼县| 年辖:市辖区| 甘洛县| 通化市| 荔浦县| 资溪县| 迁西县| 湖口县| 黄平县| 涿州市| 固安县| 兴化市| 平果县| 丘北县| 石柱| 通州市| 宁波市| 嘉荫县| 杨浦区| 开原市| 拉孜县| 永福县| 青州市| 广饶县| 江达县| 武威市| 肥西县| 玛曲县| 马鞍山市| 长岛县| 呼图壁县| 桑植县|