因为做毕业设计的需要,要用到 InputStream ,需要自己实现一个 InputStream 。因为 InputStream 是抽象类,已经有骨架实现,只需要实现 int read() 方法即可。
一开始是这样写的,
public int read(){
//此处略去若干字
byte b=...
//此处略去若干字
return (int)b ;
}
可是发现不对,流传着传着还没到结尾就完了。感觉很蹊跷,这个问题困扰我累计10小时,左思右想不得结果。api是这样解释 read 方法的
引用
从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。
看到这个我有些纳闷,byte 的取值范围是从-128 到 127,但他让我返回 0 到 255。
问题在于 将 byte 直接 转换为 int 值是不发生改变的。比如 -1 的 byte 转换 为 int 还为 -1。但如果将 -1 返回,那么就表示到达 流的结尾。所以应该将 byte 转换 为 0 到 255 范围的 int。但具体怎么转呢,我一开始是直接将 byte 加 128 然后 转为 int的。可是经过验证是错的。那具体应该怎么转呢? 正不行,倒着来。因为客户端在使用 read 方法是这样使用的
int i=in.read();
byte b=(byte)i;
看他们转换结果,反着来就可以了。经过测试 将 int 转换为 byte,当 int 在 0 到 127 范围内值是相等的;当 int 在 128 到 255 范围内,对应 byte 的 -128 到 -1,相当于减了个 256。所以猜想应该这样实现read 方法
public int read(){
//此处略去若干字
byte b=...
//此处略去若干字
if(b<0){
b=b+256;
}
return (int)b ;
}
。经验证正确。
分享到:
相关推荐
NULL 博文链接:https://superherosk123.iteye.com/blog/611933
InputStream类巾的read方法是最常用的输入方法。许多学生学习过 程中产生迷惑, 以及出现问题也是在使用read ‘法输入数据时发生 的。 如果要使用read方法输入数据,应使用“System.in.read()”的形式。 在这个...
NULL 博文链接:https://shihuan830619.iteye.com/blog/2094068
原理讲解-ServletInputStream.readLine(byte[] b, int off, int len) 方法原理讲解-ServletInputStream.readLine(byte[] b, int off, int len) 方法
springboot 解决InputStream只能读取一次的问题
关于InputStream和OutputStream关于InputStream和OutputStream关于InputStream和OutputStream关于InputStream和OutputStream
读取网络字节流 php stream 二进制
Java中InputStream类.pdf 学习资料 复习资料 教学资源
NULL 博文链接:https://cuisuqiang.iteye.com/blog/1434416
Blob、InputStream、byte 互转
深入剖析tomcat第三章SocketInputStream源码 * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/StringManager.java,v 1.2 2001/07/22 20:25:14 pier Exp $ * $Revision: 1.2...
inputstream读取数据的问题,对你的file的帮组是很大的。
InputStream与OutputStream及File间互转
Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷贝...
InputStream的用法2 --- 马克-to-win java视频 输入流
InputStream的用法1 ---马克-to-win java视频 输入流
IO流文档,相关IO流的说明文档.............
通过jsoup爬取网上图片,其中包括输入流InputStream的用法
java.io.Reader 和 java.io.InputStream 的区别
有些人需要它来进行消息包编码,我需要它来获取作为 InputStream 的图像响应,以便我可以将分段上传到另一个 URL。 从那以后,我遇到了并将其用于我的用例,因为它更简单。 Volley 编辑的相关提交在这里: : 示例...