1

我不明白为什么以下代码似乎跳过了第一个输入字符。

import java.io.*;
import java.util.Arrays;

public class Input
{
    public static void main (String args[])
    {
        try {
            echo(System.in);
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }

    static void echo(InputStream stream) throws IOException
    {
        byte[] input = new byte[10];

        char[] inputChar = new char[10];
        int current;
        while ((current = stream.read()) > 0){
            stream.read(input);

            int i = 0;
            while (input[i] != 0) {
                inputChar[i] = (char)input[i];
                if (i < 9) {
                    i++;
                }
                else {
                    break;
                }
            }   
            System.out.println(Arrays.toString(inputChar));
        }
    }
}

如果我将输入输入为“1234567890”,我得到的输出是“[2, 3, 4, 5, 6, 7, 8, 9, 0,]” inputChar 中的最后一个字符似乎是空白的。但是,如果它没有将任何字节读入 input[9],它应该是空字符(ASCII 0)。如果我输入长度小于 10 个字符的输入,我会在 inputChar 中的剩余位置得到空字符。所以我不确定这里发生了什么。

4

3 回答 3

8

while ((current = stream.read()) > 0){

您在这里进行了第一次阅读,您没有使用它,但它是一个实际阅读,它将推进您的流中的“位置”。

于 2013-01-23T19:05:05.787 回答
0

循环控制中使用的 stream.read() 读取第一个字符。

于 2013-01-23T19:58:22.030 回答
0

我用 do while loop 而不是 while loop 解决了这个问题。

这是我的完整代码:

    File f = new File("emp.doc");
    FileInputStream fi = new FileInputStream(f);
    do {
        System.out.println("Character is ; "+ (char)fi.read());
    }while(fi.read() != -1);
于 2021-03-09T11:54:59.397 回答