c与java数据传输
来源:互联网 发布:百度云盘mac历史版本 编辑:程序博客网 时间:2024/05/16 09:29
说明
当需要java调用c代码时,如果不想用jni技术,可考虑将数据存储为文本格式。但考虑到c处理字符串过于繁琐,比如就没有类似的split函数方法。同时你需要处理的东西统统都是数值类型的时候,不妨将数据都转化为二进制的格式。或许更进一步转化为json格式.
代码
这里是定义了一个数据结构,用于处理数据
//c代码
struct LonglyRiceInput{double KWX ;double MDP;double DIST[201][201];double ELEV[201][201];double HG[2];double WN;double EN0;double GME;double ZGND;double KLIM;double EPS;double SGM; };int myread(LonglyRiceInput & in){FILE * fd = fopen("D:\\workspace\\net\\input","rb");if ( fd != NULL){//fread(&in.HG, sizeof(double),2,fd);fread(&in.HG, sizeof(unsigned char) * 8, 2, fd);fread(&in.WN, sizeof(unsigned char) * 8, 1, fd);fread(&in.EN0, sizeof(unsigned char) * 8, 1, fd);fread(&in.GME, sizeof(unsigned char) * 8, 1, fd);fread(&in.ZGND, sizeof(unsigned char) * 8, 1, fd);fread(&in.KLIM, sizeof(unsigned char) * 8, 1, fd);fread(&in.EPS, sizeof(unsigned char) * 8, 1, fd);fread(&in.SGM, sizeof(unsigned char) * 8 ,1, fd);}else{return 0;}if( fd != NULL){fclose(fd);}return 1;}
//java 代码
package wifimodel;import java.io.ByteArrayOutputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import org.junit.Test;public class TestBinary {public static byte[] double2Bytes(double d) {long value = Double.doubleToRawLongBits(d);byte[] byteRet = new byte[8];for (int i = 0; i < 8; i++) {byteRet[i] = (byte) ((value >> 8 * i) & 0xff);}return byteRet;}public static class LonglyRiceInput{double KWX ;double MDP;double DIST[][];double ELEV[][];double HG[];double WN;double EN0;double GME;double ZGND;double KLIM;double EPS;double SGM; };public static void addByteList(List<Byte> dataList, double v){byte[] bytes = double2Bytes(v);for( int i = 0; i < bytes.length; i ++){dataList.add(bytes[i]);}return;}public static byte[] toByteArrs(List<Byte> dataList){byte[] ret = new byte[dataList.size()];for( int i = 0 ; i < dataList.size(); i ++){ret[i] = dataList.get(i);}return ret;}@Testpublic void testBinary() throws IOException {Double v = 20.0;System.out.println(Arrays.toString(double2Bytes(v)));LonglyRiceInput in = new LonglyRiceInput();in.HG = new double[]{12.3,0.12345678};in.WN = 13.0;in.EN0 = 172222.0;in.GME = 9.0;in.ZGND = 1.0;in.KLIM = 172.01333;in.EPS = 9898989.43;in.SGM = 9988.129222;List<Byte> dataList = new ArrayList<Byte>();addByteList(dataList, in.HG[0]);addByteList(dataList, in.HG[1]);addByteList(dataList, in.WN);addByteList(dataList, in.EN0);addByteList(dataList, in.GME);addByteList(dataList, in.ZGND);addByteList(dataList, in.KLIM);addByteList(dataList, in.EPS);addByteList(dataList, in.SGM);addByteList(dataList, in.KLIM);addByteList(dataList, in.EPS);addByteList(dataList, in.SGM);ByteArrayOutputStream byteOut = new ByteArrayOutputStream();byteOut.write(toByteArrs(dataList));FileOutputStream fstream = new FileOutputStream("D:\\workspace\\net\\input", true);byteOut.writeTo(fstream);fstream.flush();fstream.close();}}
0 0
- c与java数据传输
- java数据传输C-S
- 让Flex与Java间进行数据传输
- JSon与java之间数据传输的方式
- 黑马程序员----java基础第23天(udp数据传输与tcp数据传输)
- JXTA下的媒体数据传输 - [Matrix - 与 Java 共舞]
- android jni与java之间数据传输时怎么转换
- Android与Java 服务器使用Socket协议实现Json数据传输
- java servlet 与前端json数据传输ajax、jquery
- flex数据传输与交互
- 带宽与数据传输速率
- 数据传输、数据模型与Dozer
- Ajax 与异步数据传输
- flex - java 数据传输
- Java Socket对象数据传输
- java UDP数据传输示例
- Java NIO(2)----数据传输
- java tcp数据传输实例
- Struts2配置
- 南阳理工oj 整数划分(DP)
- 布隆过滤器
- C的学习笔记
- 包含min函数的栈
- c与java数据传输
- {题解}[jzoj5101]【GDOI2017 day2】凡喵识图
- 加密解密(三)--Java中的非对称加密算法
- 数学科普
- Windows下安装XGBoost(python基于Anaconda2)
- linux常用命令
- Java SE 03 面向对象-上
- JS事件--事件对象之DOM中的事件对象
- windows在python安装使用xgboost走了些弯路