黑马程序员技术交流社区

标题: 为什么Outputstream中的write方法可以使用int类型 [打印本页]

作者: --☆伟☆--    时间: 2012-5-21 11:50
标题: 为什么Outputstream中的write方法可以使用int类型
Outputstream中的write不是只能接受byte类型数据么,string类型想输入的话必须使用getbyte方法,但int类型为何可以直接使用,如图所示,难道不会出现什么损失精度之类错误么

未命名.jpg (50.36 KB, 下载次数: 57)

未命名.jpg

作者: 胥江    时间: 2012-5-21 12:04
write(int b)方法是将整形的b对应的ASC码写进去,方法就是这样定义的,就可以这样用啊
作者: 魏涞    时间: 2012-5-21 12:24
write
public abstract void write(int b)
                    throws IOException将指定的字节写入此输出流。write 的常规协定是:向输出流写入一个字节。要写入的字节是参数 b 的八个低位。b 的 24 个高位将被忽略。

作者: 杨梦宇    时间: 2012-5-21 14:33
实质上讲,write 方法因为在写入的时候,写入的并不是一个真正的int数据,而是写入的一个ascii的编码  你看下面的程序:
  1. import java.io.*;

  2. class FileWriteInt{

  3. public static void main(String[] args) throws IOException{

  4. File f=new File("test.txt");

  5. FileOutputStream fos=new FileOutputStream(f);

  6. fos.write(66);

  7. fos.close();

  8. FileInputStream fis=new FileInputStream(f);

  9. byte[] b=new byte[1024];

  10. int len=fis.read(b);

  11. System.out.println(new String(b,0,len));

  12. fis.close();

  13. }

  14. }
复制代码
输出结果是:B 因为在写入的时候,写入的并不是一个真正的int数据,而是写入的一个ascii的编码,所以在读取的时候按照ascii码来读取

作者: Fc10232    时间: 2012-5-21 14:53
实际上往里面传递的还是byte  向上转型为int, 所以int中后面的三个八位就没有意义,常规忽略了,但实际还是存在;
{:soso__8961432591078930798_3:}说实话,我不确定我说的对不对,希望能帮到你




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