首页 > 其他分享 >InputStream类的read()方法返回的int值是如何计算的

InputStream类的read()方法返回的int值是如何计算的

时间:2023-10-14 11:33:00浏览次数:39  
标签:read in1 InputStream int test new txt out

InputStream类有一个read()方法,它的返回类型是int。

InputStream类本身是抽象类,它的一些子类的read()方法每次读取一个字节,也就是8个二进制位。

比如读到如下二进制数据:

111111111

以上二进制数据如果按照byte类型来转换,是负数 -1

而read()方法会把它先变成32位的二进制数据:

00000000 00000000 00000000 11111111

以上显然是一个int类型的正整数255

下面再通过一个范例程序来演示。以下代码先通过DataOutputStream的writeByte()方法向test.txt文件写入一个值为-1的字节,实际写入的二进制数据为111111111

接着再通过DataInputStream的readByte()方法读取这个字节,读到的数据为-1。

接着再通过FileInputStream的read()方法读取test.txt文件,读到的数据为255。

import java.io.*;
public class Tester{
  public static void main(String[] args)throws IOException {
    FileOutputStream out1=new FileOutputStream("D:\\test.txt");
    BufferedOutputStream out2=new BufferedOutputStream(out1,2);  //装饰一个文件输出流
    DataOutputStream out=new DataOutputStream(out2);  //装饰一个带缓冲输出流
    out.writeByte(-1);  //写入一个字节
    out.close();
   
    InputStream in1=new FileInputStream("D:\\test.txt");
    BufferedInputStream in2=new BufferedInputStream(in1); //装饰一个文件输入流
    DataInputStream in=new DataInputStream(in2); //装饰一个缓冲输入流
    System.out.println(in.readByte());   //打印-1
    in.close();

    in1=new FileInputStream("D:\\test.txt");
    System.out.println(in1.read());  //打印255
    in1.close();
  }
}

上文参考孙卫琴的经典Java书籍《Java面向对象编程》

InputStream类的read()方法返回的int值是如何计算的_二进制数

标签:read,in1,InputStream,int,test,new,txt,out
From: https://blog.51cto.com/sunweiqin/7859861

相关文章

  • sprintf、snprintf、vsprintf、asprintf、vasprintf函数
    1.sprintfexternintsprintf(char*__restrict__s,constchar*__restrict__format,...);2.snprintf/*MaximumcharsofoutputtowriteinMAXLEN.*/externintsnprintf(char*__restrict__s,size_t__maxlen,......
  • 洛谷 P8192 - [USACO22FEB] Paint by Rectangles P
    比较抽象的一个题。首先先考虑\(T=1\),如果我们建一张图,将图上所有横线与竖线的交点看作图上的点,相邻的有线段相连的点看作图上的边的话,那么显然会得到一张平面图,而我们要计算的是平面图上面的个数,根据公式\(F=E-V+C+1\),其中\(C\)为这张图中连通块的个数。设\(c\)为线段与线......
  • Exception in thread "main" java.security.InvalidKeyException: Wrong key size问题
    问题描述在Java里面使用DES加密算法,然后就爆出这个错误:问题解决换用了另外一种加密解密的函数:SecretKeySpec;即将原来的这种:换成了这种:我是觉得使用DES加密算法时,它一直显示key的字节长度不对,就想着换一种表述方式,又看到了别的友友的经验分享,就换成这样试了试(直接放进mai......
  • 第三方IDE使用gdb调试Qt实现pretty print
      直接使用gdb调试Qt应用时,Qt的一些数据类型没法友好的显示出来,而qtcreator可以很好的展示出来,qtcreator也是通过gdb来调试的,在展示数据时,其实是gdb通过python脚本来处理后显示的,这些python脚本位于/usr/share/qtcreator/debugger这个位置(ubuntu20.04)。gdb在启动时,会自动在某......
  • IntelliJ IDEA的使用
    IntelliJIDEA的使用1.idea的分类:ultimate(终版);community(社区)终版要钱;社区版功能全,还没有学成,ultimate的版本一年也太贵,所有有幸有大佬指导,白嫖下。(以后加薪绝对支持下)附上下载地址:最新版本:idea最新版地址之前版本:idea老版本地址PS:一年1400大洋是小贵2.找到网上的永......
  • 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2019 无法解析的外部符号 _main
    问题描述按照思路写好了C++的程序之后,表面上看起来没什么错误,也没有红点点的出现,但是运行起来,就发现,爆出来这样一个错误:问题解决看了半天,查了半天资料,发现是这里出现了问题(我真的~~~):习惯了首字母大写,这个就当成类来写了,后来突然醒悟,这个是main函数,首字母是要小写:运行成功......
  • Hadoop-Operation category READ is not supported in state standby 故障解决
    在查询hdfs时或者执行程序向hdfs写入数据时遇到报错:OperationcategoryREADisnotsupportedinstatestandby 意思是:该主机状态为待机,不支持操作类别READ.你会发现最基本的hdfs命令都不能执行,例如:hadoopfs-ls/自定义的是nn1还是namenode1等自定义名可以在配置文件h......
  • matalab实验imread函数和FFT使用!【图像的傅立叶变换实验】
    解决的问题:Imread函数一般不要用动态的图,否则会如下的报错!步骤:随便搞一张.png图片—>新建一个文件夹—>存放你找的图片和你建的工程(matalab工程命名不可以使用空格)—>把当前文件夹设置成改你设置的文件【如图】:如果没有后缀出现(点击查看,打开显示后缀名,修改成.gif,如果实验要求是。p......
  • 铅华洗尽,粉黛不施,人工智能AI基于ProPainter技术去除图片以及视频水印(Python3.10)
    视频以及图片修复技术是一项具有挑战性的AI视觉任务,它涉及在视频或者图片序列中填补缺失或损坏的区域,同时保持空间和时间的连贯性。该技术在视频补全、对象移除、视频恢复等领域有广泛应用。近年来,两种突出的方案在视频修复中崭露头角:flow-basedpropagation和spatiotemporalTran......
  • C语言 - 使用_beginthreadex()创建线程
    经过了解才知道,C++03之前,用的创建线程都是CreateThread与_beginthreadex。使用这个两个函数进行创建线程。然后C++11之后,就出现了新的线程函数thread,当然,这个创建线程比较方便!经过两三天的纠结,最终决定深入研究_beginthreadex此方式创建线程,具体为什么我也说不清楚,看到网上很多......