黑马程序员技术交流社区

标题: 关于DataInputStream读取数据的问题 [打印本页]

作者: 罗闯    时间: 2012-4-12 20:42
标题: 关于DataInputStream读取数据的问题
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的错误呢?
作者: 蒋亮    时间: 2012-4-12 21:22
你应该用data.writeChar(a),data.writeInt(b),data.writeFloat(d);这样的话才能够与你读取的数据类型相对应,你试试
作者: 李敏    时间: 2012-4-12 21:28
                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. 第三才是注意写入和读书的顺序。         




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2