DataInputStream和DataOutputStream

yaotomo 2015-04-26 09:26:38
先向test.txt中写了一个float类型的变量和一个double类型的变量

DataOutputStream dos = new DataOutputStream(new FileOutputStream("e:\\test.txt"));
dos.writeFloat(3.14F);
dos.writeDouble(3.1415926);
dos.close();


然后用输入流去读取

DataInputStream dis = new DataInputStream(new FileInputStream("e:\\test.txt"));
float f = dis.readFloat();
double d = dis.readDouble();
dis.close();
System.out.println(f);
System.out.println(d);


运行结果是
1.4757395E20
-32.570000082271015

为什么和我保存的数值不一样???
...全文
152 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaotomo 2015-04-28
  • 打赏
  • 举报
回复
引用 5 楼 rumlee 的回复:
运行结果也完全正常啊。 97 192 3.14 3.1415926 true A
你Read的时候,只ReadFloat和Double试试 我没有Read其他的类型
rumlee 2015-04-28
  • 打赏
  • 举报
回复

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import junit.framework.TestCase;

public class Test38 extends TestCase {

	public void test1() {
		try {
			DataOutputStream dos = new DataOutputStream(new FileOutputStream(
					"e:\\test.txt"));
			dos.writeByte(97);
			dos.writeInt(192);
			dos.writeFloat(3.14F);
			dos.writeDouble(3.1415926);
			dos.writeBoolean(1+2==3);
			dos.writeChar('A');
			dos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void test2() {
		try {
			DataInputStream dis = new DataInputStream(new FileInputStream(
					"e:\\test.txt"));
			byte b = dis.readByte();
			int i = dis.readInt();
			float f = dis.readFloat();
			double d = dis.readDouble();
			boolean bo = dis.readBoolean();
			char c = dis.readChar();
			dis.close();
			System.out.println(b);
			System.out.println(i);
			System.out.println(f);
			System.out.println(d);
			System.out.println(bo);
			System.out.println(c);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
运行结果也完全正常啊。 97 192 3.14 3.1415926 true A
rumlee 2015-04-28
  • 打赏
  • 举报
回复


我用的是jdk6,不过感觉这么简单的代码不应该有版本上的差距啊。如果这都有问题,那就是java有bug了。
yaotomo 2015-04-28
  • 打赏
  • 举报
回复
引用 1 楼 rumlee 的回复:
我的运行结果是 3.14 3.1415926 你是不是哪里弄错了?
其实我本来的代码是

		DataOutputStream dos = new DataOutputStream(new FileOutputStream("e:\\test.txt"));
		dos.writeByte(97);
		dos.writeInt(192);
		dos.writeFloat(3.14F);
		dos.writeDouble(3.1415926);
		dos.writeBoolean(1+2==3);
		dos.writeChar('A');
		dos.close();
我注释掉其他类型,只留下Float和Double就没问题了,但是用这个代码为什么取不对??
yaotomo 2015-04-28
  • 打赏
  • 举报
回复
引用 1 楼 rumlee 的回复:
我的运行结果是 3.14 3.1415926 你是不是哪里弄错了?
没有啊?难道是环境的问题? 我用的是win8系统,eclipse3.7,jdk7.0
yaotomo 2015-04-28
  • 打赏
  • 举报
回复
因为我只写了一个Double和一个Float,很自然的以为读取Double就会根据存储的位置得到Double类型的数据啊
三仙半 2015-04-28
  • 打赏
  • 举报
回复
引用
你往一个管子里面第一个放了一个鸡蛋,第二个放了一个鸭蛋,然后到管子的另外一边去拿的时候,你说我只要鸭蛋,不要鸡蛋,怎么第一个出来的是鸡蛋而不是鸭蛋呢。
这个比喻很形象,流机制是一种循序读取机制,不是随机读取的,写入顺序和读出顺序必须一致。
rumlee 2015-04-28
  • 打赏
  • 举报
回复
引用 6 楼 yaotomo 的回复:
[quote=引用 5 楼 rumlee 的回复:] 运行结果也完全正常啊。 97 192 3.14 3.1415926 true A
你Read的时候,只ReadFloat和Double试试 我没有Read其他的类型[/quote] 你那不是废话吗?你不按照顺序读,怪程序有bug。晕 你往一个管子里面第一个放了一个鸡蛋,第二个放了一个鸭蛋,然后到管子的另外一边去拿的时候,你说我只要鸭蛋,不要鸡蛋,怎么第一个出来的是鸡蛋而不是鸭蛋呢。
rumlee 2015-04-27
  • 打赏
  • 举报
回复
我的运行结果是 3.14 3.1415926 你是不是哪里弄错了?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧