Ron*_*own 2 java fileinputstream eof twos-complement
因此,我不得不参加面试,我需要编写一个执行简单XOR加密的迷你应用程序,并遇到了这个问题.我使用FileInputReader来拉入每个字节,使用密钥执行XOR操作,并将结果推回FileOutputStream.什么让我思考.
FileInputStream返回一个32位有符号类型的int.只接收一个字节时,可以将其转换为"字节"类型.如果FileInputStream达到EOF,它也返回-1.但是,在二进制补码二进制中-1 == 0xff,那么如果读取的字节真的是0xff而不是EOF怎么办?
除了特殊情况(例如EOF)之外,0xff是一个数学上不会返回的字节吗?或者这是您可能需要考虑的情况,具体取决于您正在阅读的数据?
Jes*_*per 13
不,-1在一个int不是0xff,但是0xffffffff.intJava是一个32位.
在将值转换为之前byte,检查它是否为-1.
read类的方法的API文档FileInputStream解释了这一点:
从此输入流中读取下一个数据字节.值字节作为int返回,范围为0到255.如果没有字节可用,因为已到达流的末尾,则返回值-1.此方法将阻塞,直到输入数据可用,检测到流的末尾或抛出异常.
因此,如果0xff在输入中找到具有该值的字节,则该read方法将返回int值为255(0xff)的值.仅在EOF上它将返回-1(0xffffffff存储在a中时int).
| 归档时间: |
|
| 查看次数: |
3569 次 |
| 最近记录: |