[问题] InputStream“分支”式包装

楼主: willy69wu31 (小小吴)   2014-12-03 22:36:49
以前曾经写过一支读档程式,用来读取某一用空格分隔的大量资料纯文字档,
首先 FileInputStream,再加 BufferedInputStream,最后 Scanner,code 如下
> // 凭印象写的,没去编译器测过,可能有拼错
> InputStream in = new FileInputStream("scores.txt");
> in = new BufferedInputStream(in);
> Scanner s = new Scanner(in, "UTF-16LE");
这样的确可以每次呼叫 s.next(); 都抓一个值,分别存进特定阵列,这没问题。
但接下来我遇到另一种情形:
有一纯文字档类似 HTTP response,分为 header 和 body,
但结构与 HTTP response 不同,不能用现有函式库处理。
header 本身有固定编码,但其中记载 body 的编码,读完 header 才知道 body 编码。
如果将上面的 code 改成...
> // 凭印象写的,没去编译器测过,可能有拼错
> InputStream in = new FileInputStream("scores.txt");
> in = new BufferedInputStream(in);
> Scanner s1 = new Scanner(in, "UTF-16LE");
> // ...
> // 当 header 经由 s1 读取完毕,已知编码为 Encoding bodyEncoding;
> Scanner s2 = new Scanner(in, bodyEncoding);
这时候 s2 读出来结果根本就不正常,可能是 s1 已经预先 read 掉 in 的很多字符?
曾经想过:重新开启第二个 FileInputStream 再读一遍;
可是好像不够直觉,也无从得知第一个 FileInputStream 到底读多少字符。
请问有人知道这种情况下该怎么解决比较好吗?
作者: swpoker (swpoker)   2014-12-04 12:09:00
先公布文件格式大概是什么样子~例如固定长度?还是...
作者: realmeat (真肉)   2014-12-04 12:33:00
看起来好像是处理二进制的资料, 那header都有规范这种东西c是超好写, 直接struct装起来就可以用(乱入)

Links booklink

Contact Us: admin [ a t ] ucptt.com