java-C#中将double值变成二进制然后写入文件,Java中载入该文件读取此二进制double值时不正确

问题描述

C#中将double值变成二进制然后写入文件,Java中载入该文件读取此二进制double值时不正确

目前已定位到是因为C#中的byte范围是0到255,而java中byte值为-128到127导致的错误。

尝试过使用C#的sbyte来解决:

bw1 = new BinaryWriter(new FileStream("C:UsersDELLDesktopSpatialIndexctest1.bin", FileMode.Create));
bw2 = new BinaryWriter(new FileStream("C:UsersDELLDesktopSpatialIndexctest2.bin", FileMode.Create));

byte[] bits=BitConverter.GetBytes(501751.060001268);//测试数据
sbyte[] bitsb = new sbyte[8];
for (int i = 0; i < bits.Length; i++)
{
byte abyte = bits[i];
if (abyte > 127)
{
bitsb[i] = (sbyte)(abyte - 256);
}
else
{
bitsb[i] = (sbyte)abyte;
}
bw1.Write(bitsb[i]);
bw2.Write(bits[i]);
}

但是写入后对比,两个文件中的内容还是一样,并没有生成为java二进制格式。

不知道有哪位高人也遇到并解决过类似问题。

解决方案

已定位到是因为C#中的byte范围是0到255,而java中byte值为-128到127导致的错误。
不是这个问题。

byte无所谓符号不符号。
关键是java的double和C#的是否兼容,java是大端序还是小端序。

解决方案二:

问题已解决,两个问题:
一个是要将C#中的byte通过位移变为符合javabyte规则的sbyte
其次,java中的double为大端序,byte排列顺序得改变。

时间: 2024-12-04 07:05:54

java-C#中将double值变成二进制然后写入文件,Java中载入该文件读取此二进制double值时不正确的相关文章

JAVA实现文件选择器中运行.exe文件

import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; class Chooserrun extends JFrame implements ActionListener { JButton button; JTextArea text; JTextPane textpane; FileInputStream readfile; JScrollPane scroll; // Conta

Tapestry5 怎样将二进制的图片从数据库中显示出来

问题描述 Tapestry5怎样将二进制的图片从数据库中显示出来,图片是以二进制数据的形式保存进数据库的,现在想以流的形式现在在tapestry5的页面上.求解,谢谢... 解决方案 解决方案二:不知道你的数据库是什么类型的,是ms,mysql,oracle还是其它,不过一般存入数据库图片都是以blob存入的.以下是我以前用java读取oracle的一些研究笔记,可参才一下.-------------------------------------------------------------

新人求解答—Jquery怎么得到从ashx文件传过来的Json字符串里面的二进制数据!!

问题描述 新人求解答-Jquery怎么得到从ashx文件传过来的Json字符串里面的二进制数据!! 解决方案 <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.4.2.min.js"></script> <script> $.ajax({ url: 'xxxxx.ashx', dataType: 'json', success: function (json) { console.

为什么在ecplise ADT中的src文件里的java代码没有实例化就可以运行?

问题描述 为什么在ecplise ADT中的src文件里的java代码没有实例化就可以运行? 为什么在ecplise ADT中的src文件里的java代码没有实例化就可以运行?,例如onCreate()方法 , 解决方案 因为框架负责了实例化,这些代码只是不是你写的而已. 解决方案二: onCreate是系统自动回调的方法

一个java文件怎么调用另一个文件的text值

问题描述 一个java文件怎么调用另一个文件的text值 例如我在JAVA文件A里面建了一个方法 public String getUser() { String s1; s1=(String)(user.getText()); return s1; } 然后我想在JAVA文件B里调用user.getText()的值,我是这样写的 public InputCardnum inputcardnum;//这是文件A的名字 创建对象 String a=inputcardnum.getUser(); 可

java数据类型-java中只要是基本数据类型的变量初始值问题

问题描述 java中只要是基本数据类型的变量初始值问题 java中只要是基本数据类型的变量 int a;和int a =0是一样的 只要是引用数据类型变量 String a = null; String a; 是一样的 以上说法正确吗 解决方案 基本数据类型对.引用的值不初始化是没有默认值的,引用的数据类型变量不初始化是不能用的.必须初始化了别的地方才能用.因为没有引用的内存地址. 解决方案二: 你分别打印String a = null; String a; 看看. 解决方案三: java中基本

Java 9中将移除 Sun.misc.Unsafe

灾难将至,Java 9中将移除 Sun.misc.Unsafe Oracle 正在计划在Java 9中去掉 sun.misc.Unsafe API. 这绝对将是一场灾难,有可能会彻底破坏整个 java 生态圈. 几乎每个使用 java开发的工具.软件基础设施.高性能开发库都在底层使用了 sun.misc.Unsafe. 下面是上面链接中文档提到一个小列表: Netty Hazelcast Cassandra Mockito / EasyMock / JMock / PowerMock Scala

java中一个void修饰的方法无返回值,那么有是不是返回一个空对象,有空对象这种说法吗

问题描述 java中一个void修饰的方法无返回值,那么有是不是返回一个空对象,有空对象这种说法吗 java中一个void修饰的方法无返回值,那么有是不是返回一个空对象,有空对象这种说法吗 解决方案 加入你有一个对象 Object 里面有个方法:public void method1(); 那你调用这个方法的时候就是 object.method1(); 那么这里就表示 没有返回值. 所以我里面的void就是 :没有返回值,这个方法不能做他用! 对比 有一个object 里面有一个方法: publ

java- 将截断字符串或二进制数据问题,Java,sql

问题描述 将截断字符串或二进制数据问题,Java,sql 我开的长度足够大了,可是还是报错 ![图片说明](http://img.ask.csdn.net/upload/201602/17/1455723342_499331.png) public void actionPerformed(ActionEvent e) { if(e.getSource()==jb1){ Connection ct=null; Statement stm=null; PreparedStatement ps=nu