FileInputStream fInStream=new FileInputStream("c:\\1.doc");
FileOutputStream fOutStream=new FileOutputStream("C:\\4.doc");
long charSize=fInStream.available();
System.out.println("要复制的文件的字节数为:"+charSize);

for(long i=0;i<=charSize;i++)
{   
//byte c=(byte)fInStream.read();
//char c=(char)fInStream.read();
int c=(int)fInStream.read();//上面三行,选用任意一行,都能正常地执行并且复制程序,所以我很想知道三种类型的区别在哪
fOutStream.write(c);
} fOutStream.write(c);
}最好能用程序举个例子出来说明,谢谢。

解决方案 »

  1.   

    自动转换为int
    write
    public void write(int b)
               throws IOException
      

  2.   

    read
    public int read()
             throws IOException
    Reads a byte of data from this input stream. This method blocks if no input is yet available. Specified by:
    read in class InputStream
    Returns:
    the next byte of data, or -1 if the end of the file is reached. 
    Throws: 
    IOException - if an I/O error occurs.FileInputStream的read方法就是一次读取一个字节, 在这种情况下用哪个都没区别, 因为在JAVA中char点两个byte, int占四个byte, 都可以放置一个byte而不丢失任何信息. 当然用char和int浪费了一点点内存空间, 不过太小了可以忽略.
    如果某个读取方法一次读取大于一个字节, 就不能用byte来存了, 因为会丢失信息导致结果不正确.
      

  3.   

    InputStream/OutputStream 读入/输出都是以字节进行的,所以byte就可以了。当用int,char接受的时候JVM可以自动转型。如果用Reader/Writer就不一样了
      

  4.   

    DataInputStream fInStream = new DataInputStream(new FileInputStream("c:\\1.doc"));
    FileOutputStream fOutStream = new FileOutputStream("C:\\4.doc");
    long charSize = fInStream.available();
    System.out.println("要复制的文件的字节数为:" + charSize); for (long i = 0; i <= charSize; i++) {
    byte c = (byte) fInStream.readChar();
    // byte c = (byte) fInStream.read();
    // char c=(char)fInStream.read();
    // int c=(int)fInStream.read(); // 上面三行,选用任意一行,都能正常地执行并且复制程序,所以我很想知道三种类型的区别在哪
    fOutStream.write(c);
    }这回还用byte就出错了.
      

  5.   

    一般情况下读取文件都是以流来读取的,
    而流又分为字节流和字符流
    如果用InputStream来读取的话,是以字节流的形式所以,
    接受形式可以是byte或者向上兼容的类型如果像楼上那样用DataInputStream把流包装后就是以字符流的形式读取
    所以再次用byte时就会出错了!不知楼主明白否!