java.io.PushbackInputStream
0. 数据结构
protected byte[] buf; // pushback buffer
protected int pos;
读取方向很重要,设计挺巧妙的
1. read
读取时,如果pushback buffer中有,则优先从buffer中读取,否则,从InputStream中读取;
2. unread(int b) pushback操作
--pos,即从pushback buffer中申请1个字节的空间,放入回退的字节b
3. unread(byte[] b, int off, int len)
pos -= len,即从pushback buffer中申请len个字节的空间,放入回退的字节数组b
unread单个字节好理解;unread多个字节,对照数据结构,应该好点
4. 应用
org.springframework: spring-webmvc: 5.2.7.RELEASE中
AbstractMessageConverterMethodArgumentResolver中的内部类EmptyBodyCheckingHttpInputMessage,有用到该功能