以前曾经写过一支读档程式,用来读取某一用空格分隔的大量资料纯文字档,
首先 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 到底读多少字符。
请问有人知道这种情况下该怎么解决比较好吗?