//z_Data.java
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;public class z_Data{
public static void main(String args[]){
try{
FileOutputStream fout=new FileOutputStream("out1.txt");
DataOutputStream dfout=new DataOutputStream(fout);
int i;

for(i=0;i<4;i++)
dfout.writeInt('0'+i);
dfout.close();

FileInputStream fin=new FileInputStream("out1.txt");
DataInputStream dfin=new DataInputStream(fin);
for(i=0;i<4;i++)
System.out.print(dfin.readInt()+",");
dfin.close();
}
catch(Exception e){
System.err.println("error occured:"+e);
e.printStackTrace();
}
}
}
这个程序的执行结果是48,49,50,51,
但是文本中的数字是0  1  2  3,如果将dfout.writeInt('0'+i)变成dfout.writeInt(i),控制台中是0,1,2,3,但是文本中不能正常显示。
本人初学java,不知道这里数据是怎样转换的,求助。

解决方案 »

  1.   

    因为文本中默认的编码是ANSII编码,48,49,50,51对应的不正就是0 ,1 ,2 ,3 。你再对应找一下编码0,1,2,3的ANSII编码值是多少,就知道为什么后面不能正常显示了。
      

  2.   

    dfout.writeInt('0'+i);//这句话有问题。
    dfout.writeInt(i);//这样就可以了。解释:
    '0'是一个字符,在程序当中,使用它的ASCII码。
    '0'+i 结果,是一个整型的数据,他的值是字母0的ASCII码的值 再加上 i的值。
      

  3.   


    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;public class z_Data{
        public static void main(String args[]){
            try{
                FileOutputStream fout=new FileOutputStream("out1.txt");
                DataOutputStream dfout=new DataOutputStream(fout);
                int i;
                
                for(i=0;i<4;i++)
                    dfout.write(String.valueOf(i).getBytes());
    //             dfout.writeInt('0'+i);
                dfout.close();
                
                FileInputStream fin=new FileInputStream("out1.txt");
                DataInputStream dfin=new DataInputStream(fin);
                for(i=0;i<4;i++){
                 char a;
                 System.out.print((dfin.readByte()-'0')+",");
                }
                    
                dfin.close();
            }
            catch(Exception e){
                System.err.println("error occured:"+e);
                e.printStackTrace();
            }
        }
    }
    我是蒙出來的·   對IO這迷糊的很~~
      

  4.   

    楼主看这里就会明白了          for(i=0;i<4;i++){
                 System.out.println('0'+i);
                    dfout.writeInt('0'+i);
                }
      

  5.   

    这样看,char和int要相加会自动强制成int
    '0'强制int后是48
    这是个计算机基础,很重要。lz要理解。
    ASCII码表
    http://www.cnblogs.com/28088191/archive/2008/06/13/1220352.html            for(i=0;i<4;i++){
                 char tmp='0';
                 System.out.println(tmp);
                 int intTmp=tmp;
                    System.out.println(intTmp);
                 System.out.println(intTmp+i);
                    dfout.writeInt(intTmp+i);
                }
      

  6.   


    首先将dfout.writeInt('0'+i)变成dfout.writeInt(i),这样程序就没有问题了。至于为什么控制台中是0,1,2,3,但是文本中不能正常显示,这是因为你的文件是流文件,是不可读的,必须通过程序来解析,你的实例中就可以解析它。另外一个流文件的例子就是bmp,jpg,exe,dll文件等,你用文本编辑器打开什么都看不懂。那么如何做到程序中可以看,而且文本编辑器可以看,你就需要用另外两个类了,我把你的程序改了如下:import java.io.*;public class Test {
        public static void main(String args[]){
            try{
                FileOutputStream fout=new FileOutputStream("c:/temp/out1.txt");
                PrintStream dfout=new PrintStream(fout);
                int i;
                
                for(i=0;i<4;i++)
                    dfout.println(String.valueOf(i));
                dfout.close();
                
                FileInputStream fin=new FileInputStream("c:/temp/out1.txt");
                BufferedReader br=new BufferedReader(new InputStreamReader(fin));
                for(i=0;i<4;i++)
                    System.out.print(br.readLine()+",");
                br.close();
            }
            catch(Exception e){
                System.err.println("error occured:"+e);
                e.printStackTrace();
            }
        }
    }
      

  7.   

    大家都说清楚了,我就不多说了,不过不是很明白dfout.writeInt('0'+i); 这里你为什么要'0'+,没什么意义呀
      

  8.   

    感觉java的输入输出流真是多。大概有(File)(Buffered)InputStream,(File)(Buffered)OutputStream,PrintStream,
    BufferReader,BufferWriter,RandomAccessFile等等,弄得人真是糊涂啊。。感觉不都是经常用到吧。请教下常用的有哪几个?(比如C++常用的就是fstream)。。谢了。
      

  9.   

    think in  java  上有幾個常用的組合 ~~
      

  10.   

    常用的有五对流:
    1. 文件流   FileInputStream  FileOutputStream
    2. 数据流  (支持基本类型 String) DataInputStream  DataOutputStream
    3. 对象流  (读写对象)  ObjectInputStream  ObjectOutputStream
    4. 逐行流  BufferedReader(后面是Reader是字符流,Stream是字节流)    PrintStream
    5. 转换流  InputStreamReader  OutputStreamWriter