美文网首页
Java读取输入流和union type

Java读取输入流和union type

作者: 大志 | 来源:发表于2016-02-01 14:42 被阅读0次
InputStream in = ...;
in b = in.read();

对InputStream的读取操作可能发生三种情况:

  1. 异常,抛出IOException;
  2. 读取到一个字节;
  3. 到达输入流的结尾。

其中第2种情况应该返回一个字节(Java中字节的取值范围是-128~127),第3种情况应该返回一个表示“end of file”的特殊对象(暂且叫做EofObject)。所以read()的返回值类型应该是Union<Byte, EofObject>

但是Java用int这一种类型表示了2种情况:

  1. 0~225的整数表示一个字节;
  2. -1表示输入流的结尾。

这种做法带来了一些问题:

  • -1的存在导致了read返回的字节无法直接用Java的byte类型表示,造成了空间浪费;
  • 将read返回的int cast成byte前需要校验值是否为-1,忘记校验或者不小心多做了一次cast都可能引入bug。

P.S. 这里的Union应该是Typed Racket的那种“checked union”,而不是C那样的“unchecked union”。

Union type
Racket Union Types

相关文章

  • Java读取输入流和union type

    对InputStream的读取操作可能发生三种情况: 异常,抛出IOException; 读取到一个字节; 到达输...

  • Ninetheen Day(IO基本概念)

    输入流:进入Java程序里面输出流:从Java程序输出 inputstream:输入流outputstream:输...

  • java io流

    Java中按照流的不同方向分为输入流和输出流,凡是含有in的,都可理解为输入流,输入流即从文件读取到程序,凡是含有...

  • Java自学-I/O 字符流

    Java的字符流 Reader Writer Reader字符输入流Writer字符输出流专门用于字符的形式读取和...

  • J2SE 流

    Java流式输入输出原理 输入流(InputStream):程序从输入流读取数据源。数据源包括外界(键盘、文件、网...

  • 文件流

    写入流 writeStream.txt 读取流 读取流与写入流结合 文件流管道

  • 第十四章 java IO

    java IO IO:记住一句话,以程序为中心,进入程序--读取(输入流);从程序中出来--输出流 输入流:数据源...

  • 翻译:CFNetwork编程指南(二)——使用流(Working

    本文讨论如何创建、打开和检查读写流错误。它还描述了如何从读取流读取信息,如何从写入信息到写入流,如何在读取或写入流...

  • Java IO学习笔记(结合了他人的博客)

    Java中使用IO(输入输出)来读取和写入,读写设备上的数据、硬盘文件、内存键盘。根据数据的走向分为输入流和输出流...

  • IO 概述

    对于java来说输入输出问题,java见它抽象成流对象来解决. IO流在java中从输入输出角度分类: 输入流 输...

网友评论

      本文标题:Java读取输入流和union type

      本文链接:https://www.haomeiwen.com/subject/rquskttx.html