A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗闯 黑马帝   /  2012-4-12 20:42  /  2328 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class StreamTest6 {
        public static void main(String[] args) throws Exception{
                DataOutputStream  data = new DataOutputStream(new BufferedOutputStream(
                                new FileOutputStream("d.txt")));
                char a ='d';
                int   b =9;
                float d= 3.3f;
               
                data.write(a);
                data.write(b);
                data.writeFloat(d);
               
                data.close();
       
                DataInputStream data2 = new DataInputStream(new BufferedInputStream
                                (new FileInputStream("d.txt")));
               
                System.out.println(data2.readChar());
                System.out.println(data2.readInt());
                System.out.println(data2.readFloat());

                data2.close();
        }
}

明明读取和打印的顺序是一样的,为什么会出现乱码 并且有java.io.EOFException的错误呢?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

2 个回复

倒序浏览
你应该用data.writeChar(a),data.writeInt(b),data.writeFloat(d);这样的话才能够与你读取的数据类型相对应,你试试

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
                data.write(a);
                data.write(b);
                data.writeFloat(d);
你方法都弄错了。在数据操作流中,它可以写入基本数据类型,这个看它的方法名就知道了。
void writeChar(int v)
void writeInt(int v)
1.这个才是写入基本类型。
      你传入一个 char 字符进去,数据类型进行了提升,然后write 方法本身会砍掉 提升后的空间,只留下最后两个字节。同样,传入byte 会留下后 8位, 一个字节。
2. 如果你在字节输出流中直接传入 int 值, 又是另一个方法,
     void write(int b)   比如你传入 97 ,就会输出 a 。
3. 第三才是注意写入和读书的顺序。         

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马