我一直在阅读有关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.");
}
}
}
答案 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
与练习无关。