qt 关于二进制文件(类对象)读入的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt 关于二进制文件(类对象)读入的问题相关的知识,希望对你有一定的参考价值。

//写入
QFile file("staff.dat");
if (!file.open(QIODevice::WriteOnly))

QMessageBox::warning(this, tr("warning"), tr("Cannot open file for writing:"), QMessageBox::Yes);
return;

QDataStream out(&file);
out.setVersion(QDataStream::Qt_5_7);
out << qint32(ui2.tableWidget->rowCount());
for (int i = 0;i < 15;++i)

out << sta[i];

file.close();
//初始化 读入
QDataStream in(&file);
in.setVersion(QDataStream::Qt_5_7);
qint32 sta_row = 0;
in >> sta_row;
staffClass *sta = new staffClass[sta_row];

//读入数据到类数组
for (int i = 0;i < 2;++i)

in >> sta[i];

最后查看输出结果发现sta_row成功读到15,sta[0]成功读到所有成员数据,但其他14个对象成员数据都读的是空或是0,不知道哪里出了问题,还请各位能够解答。
此处为这个,i<2只是想测试下
//读入数据到类数组
for (int i = 0;i < sta_row;++i)

in >> sta[i];

参考技术A 首先你得知道这个二进制文件写入时的格式(数据类型) 比如你先写入一个int,然后char[10]; 这样无论是用Qt还是C++,或者是C读取这个文件都是按照字节数据进行读取的 首先读取int的4字节数据,然后在读取10个字符数据就行。

JVM类加载—加载

1、加载:

查找并加载类,将.class文件中的二进制数据读入到内存中,放在运行时数据区的方法内,然后在堆内创建一个java.lang.class对象用来封装类在方法区内的数据结构。并且向程序员提供了访问方法区内的数据结构的接口,程序中类的实例通过getClass()方法获取类在堆中的class对象,通过class对象可以完成对方法区中类数据结构的访问。

class文件的加载方式:

(1)、本地系统加载

(2)、网络下载.class文件

(3)、jar包、zip文件中获取

(4)、从专有数据库中提取.class文件

(5)、将Java源文件动态编译为.class文件

类加载器的类型:

Java虚拟机自带的加载器

(1)、根类加载器(BootStrap),C++实现,Java程序员无法在代码中获取到该类

(2)、扩展类加载器(Extension),Java代码实现

(3)、系统类加载器(System),又叫应用加载器,Java代码实现

用户自定义的加载器

继承java.lang.ClassLoader,用户可以定制类的加载方式

Java规范允许类加载器在预料到某个类将要被使用时就预先加载它,如果在预先加载的过程中遇到class文件缺失或存在错误,类加载器会在首次主动使用该类时才报告错误(LinkageError错误), 如果这个类一直没有被程序使用,那么类加载器就不会报错。

类被加载进内存之后后就进入连接阶段。

以上是关于qt 关于二进制文件(类对象)读入的问题的主要内容,如果未能解决你的问题,请参考以下文章

将二进制文件读入结构

关于 Blob

java中对文件进行读写操作的基本类是啥?

ifstream读取图片,Qt载入显示

Qt: 读写二进制文件(写对象, 原始数据等)

关于读文件的结束的判别方法(EOF和feof)以及区别