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 の残りの位置に null 文字が表示されます。だから私はここで何が起こっているのか分かりません。

4

3 に答える 3

8

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

ここに最初の読み取りがあります。それを使用していませんが、ストリーム内の「位置」を進める実際の読み取りです。

于 2013-01-23T19:05:05.787 に答える
0

ループ制御で使用されている stream.read() は、最初の文字を読み取ります。

于 2013-01-23T19:58:22.030 に答える