原始值的

时间:2018-04-03 12:44:05

标签: java stream

我一直在阅读有关java流的内容,并决定创建一个简单的输入类,它将读取用户(键盘)的输入并将其返回。问题是我不知道哪个流 - 用于简单原始值的类。我使用DataInputStream创建了UserInput类,但注意到我没有工作,因为据我所知,DataInputStream只支持bufferedStream,问题是我不会这样做。我知道如何在读取内容后刷新输入(没有刷新方法)。如何修复此问题,或者您是否可以建议我使用原始值的另一个输入流(无需转换和使用Integer.valueOf()等方法) 。另外,我用BufferedReader创建UserInput,但我不喜欢它,因为我不得不使用像:Double / Integer / Short / etc.valueOf()这样的方法 这是我班级的代码:

import java.io.*;
import java.util.InputMismatchException;

public class UserInput {
    static DataInputStream reader;

    public UserInput() {
        reader = new DataInputStream(System.in);
    }

    public int getInt() {
        int result = -1;
        try {
            result = reader.read();
        } catch (IOException ex) {
            ex.printStackTrace();
            System.out.println("Couldn't open buffered.Return -1");
        }
        return result;
    }

    public double getDouble() {
        double result = -1;
        try {
            result = reader.readDouble();
        } catch (IOException ex) {
            ex.printStackTrace();
            System.out.println("Couldn't open buffered.Return -1");
        }
        return result;
    }

    public float getFloat() {
        float result = -1f;
        try {
            result = reader.readFloat();
        } catch (IOException ex) {
            ex.printStackTrace();
            System.out.println("Couldn't open buffered.Return -1");
        }
        return result;
    }

    public long getLong() {
        long result = -1l;
        try {
            result = reader.readLong();
        } catch (IOException ex) {
            ex.printStackTrace();
            System.out.println("Couldn't open buffered.Return -1");
        }
        return result;
    }

    public short getShort() {
        short result = -1;
        try {
            result = reader.readShort();
        } catch (IOException ex) {
            ex.printStackTrace();
            System.out.println("Couldn't open buffered.Return -1");
        }
        return result;
    }

    public String getString() {
        String result = " ";
        try {
            result = reader.readUTF();
        } catch (IOException ex) {
            ex.printStackTrace();
            System.out.println("Couldn't open buffered.Return empty character ");
        }
        return result;
    }

    public char getChar() {
        char result = ' ';
        try {
            result = (char) reader.read();
        } catch (IOException ex) {
            ex.printStackTrace();
            System.out.println("Couldn't open buffered.Return empty character ");
        }
        return result;
    }

    /**
     * Closes the buffer.
     *
     */
    public void close() {
        try {
            if (reader != null) {
                reader.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            System.out.println("Inputstream has been closed.");
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我认为这里存在误解 - 您将System.in(这是一个字符流)视为DataInputStream(这是一个字节流 - 非常不同)

如果您打算从System.in阅读各种类型,您可以使用与此类似的操作:

    Scanner scanner = new Scanner(System.in);
    String s = scanner.next();
    System.out.println("Got string: " + s);

    double d = scanner.nextDouble();
    System.out.println("Got double: " + d);

所以你的课程可以像这样设置:

public UserInput() {
    scanner= new Scanner(System.in);
}

否则,如果您的目的是读取和写入基元,则需要先将这些基元写入DataOutputStream,这相当于DataInputStream。在这种情况下,System.in与练习无关。