用java读取输入
我有两种类型的输入数据用java读取输入,java,user-input,Java,User Input,我有两种类型的输入数据 a b c d e... 这里a、b等是要读取的值。它们都是相同的数据类型,可以是short、int、long或double。所有值都由一个或多个空格分隔。我们在一行中给出了这些,但我们不知道有多少。输入以换行结束。在第二种情况下,我们将count作为第一个变量“n”,然后是n个变量。e、 对于n=5,它看起来是这样的 n a b c d e 这可以通过扫描仪完成,但我听说扫描仪读取输入比bufferedReader方法慢。除了使用Scanner类之外,我正在寻找任
a b c d e...
这里a、b等是要读取的值。它们都是相同的数据类型,可以是short、int、long或double。所有值都由一个或多个空格分隔。我们在一行中给出了这些,但我们不知道有多少。输入以换行结束。在第二种情况下,我们将count作为第一个变量“n”,然后是n个变量。e、 对于n=5,它看起来是这样的
n a b c d e
这可以通过扫描仪完成,但我听说扫描仪读取输入比bufferedReader方法慢。除了使用Scanner类之外,我正在寻找任何可能的方法来实现这一点。我是Java新手。请提供帮助。特别是当您刚接触一种语言或环境时,我建议您从易于理解但功能强大的语言或环境开始
String inputline = "n a b c d e";
// Obtain real inputline eg by reading it from a file via a reader
inputline = someBufferedReaderDefinedElsewhere.readLine();
String[] parts = inputline.split(" ");
// easiest for case 1
for (String part : parts) {
...
}
// easiest for case 2
int numberToRead = Integer.parseInt(parts[0]);
// not < but <= because you start reading at element 1
for (int ii=1;ii<=numberToRead;ii++) {
...
}
String inputline=“n a b c d e”;
//通过读卡器从文件中读取实际的输入线
inputline=SomeBufferedReaderDefinedWhere.readLine();
String[]parts=inputline.split(“”);
//对于案例1最简单
用于(字符串部分:部分){
...
}
//对于案例2来说最简单
int numberToRead=Integer.parseInt(部分[0]);
//不是<而是我会先得到有效的东西。一旦您了解了瓶颈,只有这样才值得尝试优化它
为了回答您的问题,IMHO,读取数据的最快方法是使用内存映射文件并解析ByteBuffer,假设您有ASCII 8位字节数据(数字的合理假设),避免完全使用内置解析器。这将快得多,但对于更复杂、更彻底的过度杀戮也会有很大帮助。;)
如果您想让如何直接从ByteBuffer解析数字的示例更快,您可以使用不安全的类,但这不是标准Java。不要尝试用最快的方法,而是用最简单、最直观的方法。@darioo:实际上,我一直在寻找最快的速度,因为有时我需要在严格的时间限制内读取大量数据。@tendua您确定处理时间对您的情况很重要吗?因为过早的优化是造成很多痛苦的一个已知原因…我们如何在您的答案中定义“输入线”?我们不知道在编写代码时会给出什么字符串。@tendua任何从您的输入中获取一行的方法都可以,我修改了我的答案,以显示从(缓冲)读取器获取的一行。