QtAndroid详解(1):QAndroidJniObject

    Qt 5.3之后,新增了 QtAndroid 名字空间,内有下列四个方法:

  • QAndroidJniObject AndroidActivity()
  • int androidSdkVersion()
  • void startActivity(const QAndroidJniObject & intent, int receiverRequestCode, QAndroidActivityResultReceiver * resultReceiver = 0)
  • void startIntentSender(const QAndroidJniObject & intentSender, int receiverRequestCode, QAndroidActivityResultReceiver * resultReceiver = 0)

    我的书《Qt on Android核心编程》写作时用的 Qt SDK 版本为 5.2.0(第一个正式支持Android的Qt SDK版本),写作过程中 5.3 发布,书里只是简单介绍了下 QtAndroid 的存在,对上面的几个方法没有做实际研究,从本文开始,我就以 Qt 5.3.1 为基础,来展开介绍 QtAndroid 名字空间以及与其密切相关的 QAndroidJniObject 。

QAndroidJniObject

    在介绍 QtAndroid 里面的方法之前,必须要介绍 QAndroidJniObject 这个类。因为要使用 Qt 提供的 JNI 功能编程,离开 QAndroidJniObject 可谓寸步难行。

    QAndroidJniObject 属于 androidextras 模块,要使用它,需要在 pro 文件中加入下面的代码:

QT += androidextras

    androidextras 是从 Qt 5.2 引入的。这个模块内还包括了 QAndroidJniEnvironment 类,QAndroidJniEnvironment 代表 JNI 环境,也就是通常我们使用 JNI 编程时的 JNIEnv 。我们使用 Qt 进行 JNI 编程时,构造一个 QAndroidJniEnvironment 对象,即可获得 JNIEnv 指针,可以进一步使用 JNIEnv 的方法来实现特定功能,比如检查 JNI 调用过程中是否发生了异常、清理异常等等。更多的细节请参考 Qt 帮助和 jni.h(JDK中有此头文件,可打开浏览) 。

    我们的重头戏是 QAndroidJniObject 。

    QAndroidJniObject 是对原始 JNI 类型的封装,代表了一个 Java 对象(类的实例),它提供了很多方法供开发者使用,我把它分为三类:

  • 构造一个 Java 对象
  • 调用 Java 静态(类)方法
  • 调用 Java 实例方法

    咱们一个一个来看。

构造 Java 对象

    要调用 Java 类库,就需要构造 Java 对象,这是第一步,可能也是最难的一步。不过相信随着本文的介绍,你很快就会清楚如何构造一个对应于 Java 对象的 JNI 对象。

    QAndroidJniObject 提供了下列构造函数来创建 JNI 对象:

  1. QAndroidJniObject
  • 9
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
### 回答1: RandomAccessFile是Java中一个用于读写文件的类,它可以在文件中随意移动指针,实现对文件的随机访问。与其他文件读写类不同的是,RandomAccessFile既可以读取文件,也可以写入文件,而且可以在文件中任意位置进行读写操作。 RandomAccessFile类提供了一系列方法,包括读取和写入基本数据类型、读取和写入字节数组、读取和写入字符串、设置文件指针位置等等。通过这些方法,我们可以实现对文件的灵活读写操作。 需要注意的是,RandomAccessFile类只能操作文件,不能操作其他类型的数据源,如网络连接、内存等。同时,RandomAccessFile类也不是线程安全的,需要在多线程环境下使用时进行同步处理。 ### 回答2: RandomAccessFile是Java IO包中的一个类,它允许我们以随机读写方式访问文件的内容,即可以直接跳转并读写文件中任意位置处的数据。RandomAccessFile提供了对文件任意位置的读写操作,包括文件读取、文件写入以及对文件进行定位操作等。相对于FileInputStream和FileOutputStream,RandomAccessFile类的功能更加强大和灵活。 RandomAccessFile可以以只读、只写或读写的方式打开文件。当一个文件被打开后,我们可以通过getFilePointer方法获取当前指针的位置,并通过seek方法改变指针的位置。通过read和write方法我们可以读取和写入文件指针所在位置的数据,或者在指定位置插入新的数据,这使得RandomAccessFile类具有便捷的随机读写文件的功能。 在使用RandomAccessFile进行读写操作时,每次进行读写操作时都会将指针指向下一个位置。我们可以通过RandomAccessFile对象的getFilePointer方法获取当前指针的位置,也可以通过seek方法来定位指针的位置。 使用RandomAccessFile时,需要注意每种操作所要求的参数类型,如write方法需要传入byte数组、int、long等参数类型,而read方法需要传入byte数组参数等。同时,在操作RandomAccessFile时,我们还需要注意处理异常,如EOFException、IOException、IndexOutOfBoundsException等异常操作,以确保读写操作能够成功执行。 总之,RandomAccessFile是一种非常有用的文件读写类,它提供了随机读取文件的能力,方便了文件中任意位置的读写操作,同时也在一定程度上提高了文件的读写效率。当我们需要随机读取文件内容时,RandomAccessFile是一种非常值得使用的类。 ### 回答3: RandomAccessFile是Java中文件处理的一个重要类。它提供了对文件的读写、随机访问能力,可以读取和写入任意字节数组,还可以自由设置读写位置和文件指针位置。在很多情况下,使用RandomAccessFile比其他读写文件的方法更加方便和高效。 RandomAccessFile有两种模式:只读("r") 和读写("rw")。只读模式下可以读取文件并查找文件的指定位置,但不能修改文件内容;读写模式既可以读取文件的内容,又可以修改文件的内容。 RandomAccessFile的主要方法包括: read(): 从文件中读取一个字节,返回值在0-255之间 read(byte[] b): 从文件中读取一定数量的字节,存储到给定的字节数组b中 write(int b): 将指定的字节写入文件 write(byte[] b): 将指定的字节数组写入文件 getFilePointer(): 返回当前文件指针的位置 seek(long pos): 设置文件指针的位置 length(): 返回文件的长度 close(): 关闭RandomAccessFile类的对象 使用RandomAccessFile,可以在文件中任意位置插入数据、删除数据,也可以实现对文件内容的修改。例如,可以从文件开头写入数据,从中间删除数据,从结尾追加数据等。这种灵活性使得RandomAccessFile非常适合在许多需要对文件进行随机访问和修改的应用中使用,例如数据库、日志文件等。同时,RandomAccessFile的灵活性也带来了一些安全问题,因此在使用时要谨慎处理。 总之,RandomAccessFile是一个非常重要的Java文件处理类,具有读、写和随机访问文件内容的能力。在处理大型文件或需要对文件内容进行修改的应用中,使用RandomAccessFile能够提高程序的效率和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

foruok

你可以选择打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值