JAVA读取二进制文件以及画图教程

 更新时间:2023年07月12日 09:38:43   作者:这个人太懒了  
由于项目需要,需要对二进制文件进行读取,所以这篇文章主要给大家介绍了关于JAVA读取二进制文件以及画图的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

0 引言

最近老师让写一个程序,作为学习JAVA的练习。目的在于:将一个二进制文件中的数据读取出来,其中数据包括点的位置信息和压力值及状态。将这些数据画作图像的形式展示。

本小程序分为以下几部分:

(1)读取二进制文件;其中需要考虑二进制文件读出来的是十进制数,需要将二个字节合成一个short型,并转换为int型值。

(2)画图;根据读取到的点的信息,循环,如果状态是画,则将该点与上一点相连;

1 读取二进制文件

所有的输入流类都是抽象类InputStream或Reader的子类。本文主要使用其中的FilterInputStream子类中的DataInputStream和BufferedInputStream这两个子类。

1.1 DataInputStream

构造函数为:

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

使用基础类InputStream构造DataInputStream

方法主要有,见下表

本文使用readFully(byte[] b)方法读取所有的字节信息。

代码示例如下:

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

文件的所有信息都会存储在定义的byte数组中。

1.2 BufferedInputStream

构造函数如下:

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()返回文件的字节数;

示例代码如下:

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数组中将存放文件的所有信息。

1.3 处理数据

根据以上两种方法获取了数据,接下来将对数据转换成int型。

由于buff数组中存放的是一个字节一个字节的,故将两个字节组合即可。

代码如下:

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

以上是小端模式(低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节)的转换,大端(与小端相反)的话直接调换一下就行。

2 画图

采用Graphics2D进行画图,使用BufferedImage创建画,并通过方法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 将所有点连接成线

判断该点的状态是否是画,及下一个点是否是画,然后再连线

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 结果

4 总结

任重而道远,老师还是最牛逼的!

到此这篇关于JAVA读取二进制文件以及画图的文章就介绍到这了,更多相关JAVA读取二进制文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java swing创建一个窗口的简单步骤

    Java swing创建一个窗口的简单步骤

    这篇文章主要给大家介绍了关于Java swing创建一个窗口的简单步骤,Java Swing是Java平台下的GUI(Graphical User Interface,图形用户界面)工具包,提供了丰富的GUI组件,可以实现复杂的图形界面应用程序,需要的朋友可以参考下
    2024-06-06
  • Spring之ShutDown Hook死锁现象解读

    Spring之ShutDown Hook死锁现象解读

    这篇文章主要介绍了Spring之ShutDown Hook死锁现象解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Java语言实现简单FTP软件 FTP本地文件管理模块实现(9)

    Java语言实现简单FTP软件 FTP本地文件管理模块实现(9)

    这篇文章主要为大家详细介绍了Java语言实现简单FTP软件,FTP本地文件管理模块的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • springboot整合Excel填充数据代码示例

    springboot整合Excel填充数据代码示例

    这篇文章主要给大家介绍了关于springboot整合Excel填充数据的相关资料,文中通过代码示例介绍的非常详细,对大家学习或者使用springboot具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • java使用servlet实现验证码

    java使用servlet实现验证码

    这篇文章主要介绍了java使用servlet实现验证码,简单实用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • JVM(Java虚拟机)简介(动力节点Java学院整理)

    JVM(Java虚拟机)简介(动力节点Java学院整理)

    Java虚拟机(Jvm)是可运行Java代码的假想计算机。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。对java jvm 虚拟机感兴趣的朋友通过本文一起学习吧
    2017-04-04
  • 在Eclipse中使用版本管理工具SVN的图文教程

    在Eclipse中使用版本管理工具SVN的图文教程

    下面小编就为大家分享一篇在Eclipse中使用版本管理工具SVN的图文教程,具有很好的参考价值,一起跟随小编过来看看吧
    2017-11-11
  • java:无法访问org.springframework.boot.SpringApplication的解决方法

    java:无法访问org.springframework.boot.SpringApplication的解决方法

    这篇文章主要给大家介绍了关于java:无法访问org.springframework.boot.SpringApplication的解决方法,文中通过实例代码将解决的办法介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • Spring中@Conditional注解的用法

    Spring中@Conditional注解的用法

    这篇文章主要介绍了Spring中@Conditional注解的用法,@Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件给容器注册bean,需要的朋友可以参考下
    2024-01-01
  • Spring数据库事务的实现机制讲解

    Spring数据库事务的实现机制讲解

    这篇文章主要介绍了Spring数据库事务的实现机制讲解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10

最新评论