当前位置:网站首页 > R语言数据分析 > 正文

ifstream获取文件长度(ifstream的getline)



我们经常遇到在native代码中处理数组的需求,JNI中数组的使用可以说是基本功。下面的例子演示了如何在JNI中获取数组的长度,JNI获取Java层的数组并使用等。

返回数组中元素的数量。

LINKAGE:

JNIEnv接口函数表中的索引171。

PARAMETERS:

env:JNI接口指针。

array:一个Java数组对象。

RETURNS:

返回数组的长度。

用于构造新原始数组对象的一系列操作。下表描述了特定的基本数组构造函数。您应该将NewArray替换为此表中的一个实际原始数组构造函数例程名称,并将ArrayType替换为该例程的相应数组类型。

LINKAGE:

JNIEnv接口函数表中的索引。

PARAMETERS:

env:JNI接口指针。

length:数组长度。

RETURNS:

返回Java数组,如果无法构造数组,则返回NULL。

返回基本数组主体的一系列函数。结果有效,直到调用相应的ReleaseArrayElements()函数。由于返回的数组可能是Java数组的副本,因此在调用ReleaseArrayElements())之前,对返回数组所做的更改不一定会反映在原始数组中。

如果isCopy不为NULL,如果进行了复制,则*isCopy设置为JNI_TRUE; 如果没有复制,则设置为JNI_FALSE。

下表描述了特定的原始数组元素访问器。您应该进行以下替换:

  • 将GetArrayElements替换为下表中的一个实际原始元素访问器例程名称。
  • 将ArrayType替换为相应的数组类型。
  • 将NativeType替换为该例程的相应本地类型。

无论如何在JVM中表示布尔数组,GetBooleanArrayElements()始终返回指向jbooleans的指针,每个字节表示一个元素(解包表示)。其他类型的所有数组都保证在内存中是连续的。

LINKAGE:

JNIEnv接口函数表中的索引。

PARAMETERS:

env:JNI接口指针。

array:一个Java字符串对象。

isCopy:指向布尔值的指针。

RETURNS:

返回指向数组元素的指针,如果操作失败则返回NULL。

一系列函数,通知VM本地代码不再需要访问elems。elems参数是使用相应的GetArrayElements()函数从数组派生的指针。如有必要,此函数会将对elems所做的所有更改复制回原始数组。

mode参数提供有关如何释放数组缓冲区的信息。如果elems不是数组中元素的副本,则mode无效。否则,模式会产生以下影响,如下表所示:

在大多数情况下,程序员将“0”传递给mode参数,以确保固定和复制数组的一致行为。其他选项使程序员可以更好地控制内存管理,并且应该非常谨慎地使用。

下表描述了构成原始数组处理者系列的特定例程。您应该进行以下替换:

  • 将ReleaseArrayElements替换为下表中的一个实际原始数组处理程序例程名称。
  • 将ArrayType替换为相应的数组类型。
  • 将NativeType替换为该例程的相应本地类型。

LINKAGE:

JNIEnv接口函数表中的索引。

PARAMETERS:

env:JNI接口指针。

array:一个Java数组对象。

elems:指向数组元素的指针。

mode:释放模式。

一组函数,将原始数组的某个区域复制到缓冲区中。

下表描述了特定的原始数组元素访问器,你应该做以下替换:

  • 将GetArrayRegion替换为下表中的一个实际原始元素访问器例程名称。
  • 将ArrayType替换为相应的数组类型。
  • 将NativeType替换为该例程的相应本地类型。

LINKAGE:

JNIEnv接口函数表中的索引。

PARAMETERS:

env:JNI接口指针。

array:一个Java数组。

start:起始索引。

len:要复制的元素数。

buf:目标缓冲区。

THROWS:

ArrayIndexOutOfBoundsException: 如果区域中的某个索引无效。

一组函数,用于从缓冲区中复制回原始数组的某个区域。

下表描述了特定的原始数组元素访问器。您应该进行以下替换:

将SetArrayRegion替换为下表中的一个实际原始元素访问器例程名称。
将ArrayType替换为相应的数组类型。
将NativeType替换为该例程的相应本地类型。

LINKAGE:

JNIEnv接口函数表中的索引。

PARAMETERS:

env:JNI接口指针。

array:一个Java数组。

start:起始索引。

len:要复制的元素数。

buf:源缓冲区。

THROWS:

ArrayIndexOutOfBoundsException: 如果区域中的某个索引无效。

注意

从JDK/JRE 1.1开始,程序员可以使用Get/ReleaseArrayElements函数来获取指向原始数组元素的指针。如果VM支持固定,则返回指向原始数据的指针; 否则,制作副本。从JDK/JRE 1.3开始引入的新功能允许本地代码获取指向数组元素的直接指针,即使VM不支持固定。

本实例通过在native代码中修改传入的数组,观察不同的JNI函数的作用。我们不难发现GetIntArrayElements和ReleaseIntArrayElements要成对使用,如果乱用,会出现意想不到的问题。同时在ReleaseIntArrayElements函数中试验了参数JNI_ABORT,发现native修改并未生效。最后验证了GetIntArrayRegion、SetIntArrayRegion和NewIntArray。这些函数都是我们在JNI操作数组中经常遇到的。

Native代码:

运行结果

到此这篇ifstream获取文件长度(ifstream的getline)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • driddle怎么读(dried怎么读英语单词)2025-02-15 09:27:04
  • qpainter图层放到最上层(painter的图层)2025-02-15 09:27:04
  • 数组方法filter返回值(数组的返回值怎么写return)2025-02-15 09:27:04
  • swagger 返回map(swagger pathmapping)2025-02-15 09:27:04
  • crrju手表多少钱(cruiser手表多少钱)2025-02-15 09:27:04
  • mvc与webform相比有什么优势(webforms和mvc的区别)2025-02-15 09:27:04
  • redhat操作系统的优点(redhat linux操作系统)2025-02-15 09:27:04
  • redis怎么连接(redis desktop manager连接redis)2025-02-15 09:27:04
  • ldr指令和mov(ldr指令和ldr伪指令有什么不同)2025-02-15 09:27:04
  • ip15promax电池容量是多少(苹果1pro max电池容量)2025-02-15 09:27:04
  • 全屏图片