JNI GetByteArrayElements () 错误

2024-02-29

我是 JNI 的新手,所以我对 JNI 和英语都不熟悉。

我的JNI项目是一个简单的文件读写。在 Java 中读取文件并将字节数组传递给 C API,然后使用 C 将其写入文件。

我的源代码:

Java代码是:

public class FileIO {
   static {
      System.loadLibrary("FileIO");         
   }

   private native void writeFile(byte[] msg);

   public static void main(String[] args) throws IOException { 

      byte[] array = Files.readAllBytes(new File("PtFBWCTn.mp3").toPath());

      // System.out.println(array.length);
      new FileIO(). writeFile(array); 
   }
}

C code :

#include <jni.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include "HelloJNI.h"

JNIEXPORT void JNICALL Java_FileIO_ writeFile (JNIEnv *env, jobject job, jbyteArray array ){

    jsize num_bytes = (*env)->GetArrayLength(env, array);
    printf("Byte length : %d\n" , num_bytes);

    unsigned char * buffer;
    jbyte  *lib ;
    lib =(jbyte *) malloc( ( num_bytes +1 ) * sizeof(jbyte));

    (*env)->GetByteArrayRegion(env , array, 0 , num_bytes , lib);
    // lib = (*env)->GetByteArrayElements(env , array, 0);
    buffer =(char *) lib ;
    FILE *fp;
    fp=fopen("test.mp3", "wb");
    printf("size : %d , length : %d  ,contant : %s\n" ,(int)sizeof(buffer), (int)strlen(buffer) ,  buffer );

    fwrite(buffer, sizeof(buffer[0]), sizeof(buffer)/sizeof(buffer[0]), fp);
    return;
}

我路过时遇到问题(.zip , .mp3 , .mp4 , .jpg and .png) 文件字节数组。我尝试一些文本文件格式,例如.txt, .java , .c文件创建的是我所期望的。

是什么原因?

我尝试过(用Java读取我的java文件(FileIO.java),输出是):

Byte length : 238653
size : 8 , length : 4  ,contant : import java.nio.file.Files;
import java.io.File;

public class FileIO {
   static {
      System.loadLibrary("FileIO");         
   }

   private native void writeFile(byte[] msg);

   public static void main(String[] args) throws IOException { 

      byte[] array = Files.readAllBytes(new File("PtFBWCTn.mp3").toPath());

      // System.out.println(array.length);
      new FileIO(). writeFile(array); 
   }
}

我尝试了(一些 test.png ,输出是):

Byte length : 381729
size : 8 , length : 8  ,contant : ?PNG

GetByteArrayElements() 在读取媒体和其他某些格式时仅返回 8 个字节。但对于文本文件,它返回正确的字节数。 请提供“png”和其他某些格式长度不等于字节长度的原因。并提供如何解决这个问题的方法。


    jsize num_bytes = (*env)->GetArrayLength(env, array);
    char * buffer;

    buffer = (char *) malloc (num_bytes);

    jbyte  *lib = (*env)->GetByteArrayElements(env , array, 0);

    memcpy ( buffer , lib , num_bytes ) ;

    FILE *fp;
    fp=fopen("test.png", "wb");
    fwrite(buffer, sizeof(char) , num_bytes , fp);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JNI GetByteArrayElements () 错误 的相关文章

  • .class 与 .java

    class 文件和 java 文件有什么区别 我正在尝试让我的小程序工作 但目前我只能在 Eclipse 中运行它 还不能嵌入 HTML 谢谢 编辑 那么如何使用 JVM 进行编译呢 class 文件是编译后的 java 文件 java 都
  • 公共基类打破了元组的空基类优化

    gcc 4 7 1 对元组进行空基类优化 我认为这是一个非常有用的功能 然而 这似乎有一个意想不到的限制 include
  • 如何在 C# 中创建 PKCS12 .p12 文件?

    这可能是一个n00b问题 但我在这方面确实没有任何经验 我需要创建一个包含 X509 证书和私钥的 p12 捆绑包 我当前有两个对象 X509Certificate2 和包含关键信息的 RSAParameters 对象 如何将它们合并到 p
  • Xcode 新手无法用 C++ 打开文件?

    我一直在我参加的课程中使用 Windows 但我正在尝试运行基本代码来弄清楚如何从 Xcode 上的文件打开 关闭 输入 输出 而我通常在 Visual Studio 上使用的代码不是不知道为什么 谢谢 include
  • C# 中不区分大小写的替换不使用正则表达式?

    有没有一种方法可以在不使用 C 中的正则表达式的情况下对字符串进行不区分大小写的替换 像这样的东西 string x Hello x x Replace hello hello world 你可以尝试类似的东西 string str Hel
  • 是什么原因导致“对象不是声明类的实例”? [复制]

    这个问题在这里已经有答案了 可能的重复 使用反射调用方法时 为什么会出现 对象不是声明类的实例 https stackoverflow com questions 7202988 why do i get object is not an
  • RMI 服务器:rmiregistry 或 LocateRegistry.createRegistry

    对于服务器端的RMI 我们需要启动吗rmiregistry程序 或者只是调用LocateRegistry createRegistry 如果两者都可以的话 各有什么优点和缺点 他们是同一件事 rmiregistry是一个单独的程序 您可以从
  • 指向 VLA 的指针

    你可能知道 VLA 的优点和缺点 https stackoverflow com a 3082302 1606345在 C11 中它们是可选的 我认为使 VLA 成为可选的主要原因是 堆栈可能会爆炸 int arr n where n 10
  • java中的比较器链

    正在阅读Oracle 关于接口的 Java 教程 https docs oracle com javase tutorial java IandI createinterface html其中给出了一个例子Card 打牌 我试图理解接口中的
  • 将字符串中的字符向左移动

    我是 Stack Overflow 的新手 有一道编程课的实验室问题一直困扰着我 该问题要求我们将字符串 s 的元素向左移动 k 次 例如 如果输入是 Hello World 和3 它将输出 lo WorldHel 对于非常大的 k 值 它
  • Java SE + Spring Data + Hibernate

    我正在尝试使用 Spring Data Hibernate 启动 Java SE 应用程序 并且到目前为止已经完成了以下操作 配置文件 Configuration PropertySource classpath hibernate pro
  • 从 cin 读取整数序列并将它们存储在向量中

    这就是我读取整数的方法std cin并将它们存储在向量中 int number vector
  • 什么是 C++11 扩展 [-Wc++11-extensions]

    我需要一些帮助来了解此错误发生的位置 警告 非静态数据成员的类内初始化是 C 11 扩展 Wc 11 extensions 这是它来自的代码部分 typedef struct Hand bool straight false bool fl
  • 监控 Java 应用程序上的锁争用

    我正在尝试创建一个小基准 在 Groovy 中 以显示几个同步方法上的高线程争用 当监控自愿上下文切换时 应该会出现高争用 在 Linux 中 这可以通过 pidstat 来实现 程序如下 class Res private int n s
  • 如何在RcppParallel中调用用户定义的函数?

    受到文章的启发http gallery rcpp org articles parallel distance matrix http gallery rcpp org articles parallel distance matrix 我
  • 来自用户定义文字的整数字符序列,以字符串作为参数

    目前 只有双精度数可以在用户定义的文字中生成字符模板 template
  • SQL Server CE 不兼容的数据库版本

    我有一个 SQL Server CE 4 0 数据库 sdf文件 当我尝试从我的应用程序 WPF 对数据库进行查询时 出现以下错误 数据库版本不兼容 如果这是兼容文件 请运行修复 其他情况请参考文档 数据库版本 4000000 请求的版本
  • 查找文本文件中每行的行大小

    如何计算每行中的字符或数字数量 是否有类似 EOF 的东西更像是行尾 您可以遍历行中的每个字符并不断增加计数器直到行尾 n 遇到 确保以文本模式打开文件 r 而不是二进制模式 rb 否则流不会自动将不同平台的行结束序列转换为 n 人物 这是
  • 如何在c#中获取斐波那契数

    伙计们 我有一个关于斐波那契的问题 如何获得斐波那契数列 该数字也将以用户输入结束 例如 如果我输入 21 则输出必须为 0 1 1 2 3 5 8 13 21 这是我的代码 static void Main string args int
  • 使用 ImageResizer 获取图像尺寸的最佳方法

    我正在将现有的 MVC 4 网站从自制用户文件上传切换为在上传时使用 ImageResizer 调整文件大小 我在文档中看到我不应该使用 System Drawing 但我无法找出任何其他获取图像尺寸的方法 尺寸是来自原始图像还是调整大小的

随机推荐

  • 安装 DBD::Oracle 时出错

    我正在尝试在我的 RHEL6 1 服务器上安装 Perl 模块 DBD Oracle 在此过程中 我遵循了以下步骤 安装以下 RPM oracle instantclient12 1 basic 12 1 0 2 0 1 x86 64 rp
  • Xcode 构建设置“构建产品路径”(CONFIGURATION_BUILD_DIR)是一个谎言?

    如果我创建一个新的应用程序项目 构建设置如下所示 它声称正在使用构建目录build Debug iphoneos 我认为这是相对于项目目录的 实际上 该项目被编译到 派生数据 目录下 Library Developer Xcode Deri
  • Rails:使用 Authlogic 进行授权

    我需要一个非常精细的授权系统 可以与真实逻辑 http github com binarylogic authlogic tree master 到目前为止我已经尝试过这些宝石 插件 Lockdown http stonean com wi
  • 在 Chef 中使用属性

    刚刚开始使用chef最近 我发现属性存储在一个名为的大型整体哈希中node可在您的食谱和模板中使用 似乎有多种定义属性的方法 直接在食谱本身中 在属性文件下 例如attributes default rb 在传递给的 JSON 对象中che
  • 将多行合并为具有多列的不同行的查询

    我不认为自己是一个完整的 SQL 新手 但我已经断断续续地盯着这个问题两天了 我开始想也许我就是 使用以下两个表 ID Category 1 Animal 2 Color 3 Sport Name ID Value Fred 1 Cat F
  • iOS 8 上的 MPVolumeView 动画

    iOS 8 中存在一个问题或一个功能 当 MPVolumeView 显示时 它会被动画化 就像从 0 扩展到它的宽度一样 我该如何纠正这种行为 iOS 7 上没有这个问题 消除此行为的一种可能方法是子类化 MPVolumeView 并在之后
  • Svelte商店功能更新

    Svelte 存储文档显示正在更新字符串或整数 但我没有在存储中找到任何动态函数 我不明白如何制作getData作为可写函数以通知 html 发生的变化 在下面的示例中 我想b后显示updateKey函数被调用 您将在此处找到 REPL 中
  • 将 OpenSSL 与自定义通道结合使用

    我 在 CPP 中 开发了一种基于 HTTP 的独特协议 并使用它与我的服务器进行通信 现在 我想通过我的专有协议建立 SSL 连接来传输数据本身 我可以使用 OpenSSL 来实现吗 我在网上搜索了所有与 BIO 相关的内容 但我不明白如
  • Objective C 中从 id 到 class 的动态类型转换

    我想在 Objective C 中动态转换并访问实例属性 这里有一个伪代码 id obj if condition1 obj Class1 fetchedResults objectAtIndex indexPath row else ob
  • Mocha 在测试中保留文件状态

    我有一个单元测试正在测试配置文件的更新 当然 在运行测试后 我的文件现在被更改了 我想我可以使用 之前 来缓存文件并在 之后 恢复它 mod require modtotest describe Device Configuration f
  • 在线时未呈现 Google+ 登录按钮

    我正在为我的新手机游戏开发一个社区网站 并尝试向其中添加 google plus 登录流程 实施过程中采取的步骤 gt 已关注this https developers google com web signin add button谷歌开
  • 检测HTML元素是否包含特定字符实体

    如果我有这样的标记 div xf067 div 我想稍后检测 div foo 是否仍然包含相同的字符实体 我希望能够通过将其与 xf067 而不是为了 在我的代码库中 出于维护目的 这相当迟钝 我尝试过这样的事情 使用 jQuery con
  • getBoundingClientRect().width 和 height 是否包括元素的填充和边框?

    Does getBoundingClientRect width and height属性 同时返回值包括元素的填充和边框 TLDR 它将始终返回尺寸边框框 下面的绿色框 其中包含内容区 填充区域 and 边区 如定义在CSS 盒子模型 h
  • 让 Android WebView 检测并弹出电子邮件对话框或电话对话框

    在 Android 上 当内置浏览器遇到电子邮件或电话号码并按下时 会出现一个对话框 但是 如果我导航到应用程序的 web 视图中的该 url 则情况不再如此 无论如何 我的 webview 在检测电子邮件和电话号码并在按下时弹出相应的默认
  • UndefinedFunctionError phoenix Elixir 新项目

    全新安装 Phoenix 后 我尝试触发一个新项目 当我尝试运行服务器时 我遇到了 Unchecked dependencies for environment dev gettext Hex package the dependency
  • Node.js 服务器启动速度非常慢

    我构建了一个小型 angular js Web 应用程序 托管在我的计算机上运行的 Node js 服务器上 当我启动节点服务器时 大约需要 30 35 秒 同事计算机上的完全相同的服务器需要 2 4 秒才能启动 我已在控制台中记录了时间
  • nhibernate 是否可以将查询作为 IDictionary 而不是实体类返回?

    我有一个实体人 public class Person public virtual int Id get set public virtual string FirstName get set public virtual string
  • iOS 魔法记录 & SQLCipher

    我正在使用 Magical Record 来保存我的数据 这些数据需要加密 所以我尝试将其与 SQLCipher 库结合起来 http sqlcipher net ios tutorial http sqlcipher net ios tu
  • 如何使用java的selenium web驱动程序获取特定optgroup下的选项?

    例如 我想从多选选项列表字段中选择特定 optgroup 下的选项
  • JNI GetByteArrayElements () 错误

    我是 JNI 的新手 所以我对 JNI 和英语都不熟悉 我的JNI项目是一个简单的文件读写 在 Java 中读取文件并将字节数组传递给 C API 然后使用 C 将其写入文件 我的源代码 Java代码是 public class FileI