Java 读取二进制文件 ,读八个字节,然后转换成一个double,怎么写? 我知道怎么读四个字节转成int的。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 读取二进制文件 ,读八个字节,然后转换成一个double,怎么写? 我知道怎么读四个字节转成int的。相关的知识,希望对你有一定的参考价值。

读四个字节,然后转int;
public int readBigInt(InputStream in)throws IOException
int ch1 = in.read();
int ch2 = in.read();
int ch3 = in.read();
int ch4 = in.read();
if ((ch1 | ch2 | ch3 | ch4) < 0)
throw new EOFException();
return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0));

请大神指点,帮我写个读八个字节,然后转double的方法。 移位操作实在不熟啊。

先申明一下你的前提是二进制文件,读取8个字节,那么可以这么做:
public double readDouble(InputStream in) throws IOException
byte[] tmp = new byte[8 * 8];//8个字节长度
if (in != null && (in.read(tmp) != -1))
String str = new String(tmp);
return Double.valueOf(str);

return -1;
追问

为什么是byte[8*8]?
好的,你的方法我试一下。另外,你会不会用移位的方法来转Double? 就像我上面的用移位的方法来转Int。

追答

哦,不好意思,我写错了
基本数据类型double占用8个字节,应该是
public double readDouble(InputStream in) throws IOException
byte[] tmp = new byte[8];//8个字节长度
if (in != null && (in.read(tmp) != -1))
String str = new String(tmp);
return Double.valueOf(str);

return -1;

不会用移位的方法转换,java有封装好的算法,为什么要自己写呢?还有,如果自己写的话,那么多种类型转换,每个都要去实现一遍吗?没必要

追问

亲测方法无效。。报错了亲。。

追答

首先,你要确保你传过来的是二进制输入流,然后还要确保你的输入流里面的内容是可以转化为double类型的,我是根据你提供的两个条件写的代码,我自己测试过,是对的

追问

你把你写的测试代码我看看。

追答

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
public class TestMain
public static void main(String[] args) throws IOException
TestMain test = new TestMain();
double value = 12111113.11111;
//将double类型数据转成二进制数据
String str_value = Long.toBinaryString(Double.doubleToRawLongBits(value));
InputStream in = new ByteArrayInputStream(str_value.getBytes());
try
double v = test.readDouble(in);
System.out.println(v);
finally
in.close();


private double readDouble(InputStream in) throws IOException
//1个double的二进制字节码有64位
byte[] tmp = new byte[8 * 8];
int read = 0;
if (in != null && ((read = in.read(tmp)) != -1))
String str_value = new String(tmp, 0, read);
return Double.longBitsToDouble(Long.parseLong(str_value, 2));

return -1;

参考技术A 一样的啊
public double readBigInt(InputStream in)throws IOException
int ch=0;
double d=0;
for(int i=8;i>0;i--)
ch=in.read();
if(ch<0)
throw new EOFException();
d=d+(ch<<8*(i-1));

return d;
本回答被提问者采纳

java里怎样把文件转换成二进制

不知道javaweb工程里怎么把文件转换成二进制,哪位大神能指教下吗 谢谢了

转换文件成为二进制数据并保存的Java代码:

取出数据并还原文件到本地的java代码:

[java] view plain copy//读取数据库二进制文件  

public void readerJpg() throws SQLException  

  

connection=connectionManager.getconn();//自己连接自己的数据库

String sqlString="select images from save_image where id=4";//从数据库中读出要还原文件的二进制码,这里我读的是自己的数据库id为4的文件  

File file=new File("E:\\\\1.jpg");//本地生成的文件  

if(!file.exists())  

  

try   

file.createNewFile();  

 catch (Exception e)   

e.printStackTrace();  

  

  

try   

byte[] Buffer = new byte[4096*5];  

statement=connection.prepareStatement(sqlString);  

resultSet = statement.executeQuery();  

if(resultSet.next())  

  

FileOutputStream outputStream = new FileOutputStream(file);  

InputStream iStream = resultSet.getBinaryStream("images");//去字段用getBinaryStream()  

int size=0;  

while((size=iStream.read(Buffer))!=-1)  

  

System.out.println(size);  

outputStream.write(Buffer,0,size);  

  

  

 catch (Exception e)   

e.printStackTrace();  

  

 

参考技术A

    java里把文件转换成二进制的步骤如下:

    1、在Eclipse中新建一个Java工程,在此工程中新建一个Java类;

    2、在新建的Java类中利用FileInputStream和ByteArrayOutputStream来读取指定文件的内容,并转换成二进制;

    3、具体实现代码如下:

public static byte[] getFileToByte(File file) 
        byte[] by = new byte[(int) file.length()];
        try 
            InputStream is = new FileInputStream(file);
            ByteArrayOutputStream bytestream = new ByteArrayOutputStream();
            byte[] bb = new byte[2048];
            int ch;
            ch = is.read(bb);
            while (ch != -1) 
                bytestream.write(bb, 0, ch);
                ch = is.read(bb);
            
            by = bytestream.toByteArray();
         catch (Exception ex) 
            ex.printStackTrace();
        
        return by;
    

参考技术B try
File file=new File("D:\\1.jpg");//要转换的文件
FileInputStream inputStream=new FileInputStream(file);
String sql="insert into save_image(images) values(?)";//存入数据库的SQL语句在执行的时候一定要用prepareStatement
statement=connection.prepareStatement(sql);
statement.setBinaryStream(1, inputStream,(int)file.length());
statement.executeUpdate();

catch (FileNotFoundException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (SQLException e)
// TODO Auto-generated catch block
e.printStackTrace();
参考技术C inputStream 读取进来就是二进制呀 参考技术D 你的意思是将文件转化成流的形式是吧?可以这么做,先通过本类来得到类的加载器,然后在通过类的加载器来把文件作为流加载进来:FileInputStream input = this.getClass().getClassLoader().getResourceAsStream("文件名称");

以上是关于Java 读取二进制文件 ,读八个字节,然后转换成一个double,怎么写? 我知道怎么读四个字节转成int的。的主要内容,如果未能解决你的问题,请参考以下文章

java里怎样把文件转换成二进制

java里怎样把文件转换成二进制?

java中怎样将视频文件转换成二进制文件再转换回视频文件?求具体代码!

java读取二进制文件

在java里面 把 文件转换成二进制流 然后在.net里面 再把二进制流转化成文件.......

C 字节数组转换成字符串