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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Outputstream中的write不是只能接受byte类型数据么,string类型想输入的话必须使用getbyte方法,但int类型为何可以直接使用,如图所示,难道不会出现什么损失精度之类错误么

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

未命名.jpg

评分

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

查看全部评分

4 个回复

倒序浏览
write(int b)方法是将整形的b对应的ASC码写进去,方法就是这样定义的,就可以这样用啊
回复 使用道具 举报
write
public abstract void write(int b)
                    throws IOException将指定的字节写入此输出流。write 的常规协定是:向输出流写入一个字节。要写入的字节是参数 b 的八个低位。b 的 24 个高位将被忽略。

评分

参与人数 1黑马币 +2 收起 理由
--☆伟☆-- + 2 很给力!

查看全部评分

回复 使用道具 举报
实质上讲,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码来读取
回复 使用道具 举报
实际上往里面传递的还是byte  向上转型为int, 所以int中后面的三个八位就没有意义,常规忽略了,但实际还是存在;
{:soso__8961432591078930798_3:}说实话,我不确定我说的对不对,希望能帮到你
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马