在 java 中获取输入的快速方法是什么?

what are the fast ways to take input in java?

在 Java 中,我使用标准 ScannerBufferedReader 类 进行输入,例如:

Scanner sc=new Scanner(System.in);
int a=sc.nextInt();

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

int a=Integer.parseInt(br.readLine());

但是接受这样的输入需要很多 运行 时间。我想知道更快的输入方式。提前致谢

编辑:我见过像 uwi 这样的顶级 java 编码员,他们以非常不同的方式接受输入。他们有点创建自己的 reader class。我不明白他们的程序如何在运行时变快。

来自 dejavu 的引述: “BufferedReader 比 Scanner 快很多,因为它缓冲了字符,所以您不必每次都访问该文件,您想要从中读取一个字符。

扫描仪有特殊用途,例如直接读取原始数据类型,也可用于正则表达式。

我同时使用了 Scanner 和 BufferedReader,BufferedReader 提供了显着的快速性能。你也可以自己测试一下。"

来自:which to choose buffered reader or scanner from performance point of view

在下面的文章中,作者讨论了在控制台中读取用户输入的三种不同方式。每种方式都相当容易使用,也有自己的优点和缺点。

讨论了以下机制并提供了示例。 还有一个优缺点部分。

Link: http://www.codejava.net/java-se/file-io/3-ways-for-reading-input-from-the-user-in-the-console

Link: Most Efficient Way of Taking User Input in Java

选项:

扫描器Class->

  Scanner reader = new Scanner(System.in);  // Reading from System.in
  System.out.println("Enter a number: ");
  int n = reader.nextInt();

DataInputStream->

 DataInputStream dis = new DataInputStream(System.in);
 int i = dis.readInt();

BufferedReader ->

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter your name: ");
String name = reader.readLine();
System.out.println("Your name is: " + name);

控制台->

  Console console = System.console();
  String s = console.readLine();
  int i = Integer.parseInt(console.readLine());

如果您想要一种快速方式通过标准输入进行输入(并且,如果我理解正确的话,您想要一种快速方式来重复向您的程序提供输入),您最好赌注是通过管道或重定向罐头响应,例如

$ java MyReadingClass < mycannedinput.txt

因此您可以构建您的 class 以通过标准输入进行交互式输入,然后使用简单的 shell 重定向来输入固定输入,这样您就不必每次都重新输入.

这是一个重复的问题,在java中读取和写入数据的优化方法可以在下面找到link。

这些类对于在编程竞赛中读取输入和写入输出非常有用。

在 java 中获取用户输入的最快方法,特别是竞争性编码是使用 bufferedReader 和 StringTokenizer.[=13 制作自己的 FastReader class =]

此方法利用了 BufferedReader 和 StringTokenizer 的时间优势以及用户定义方法的优势,可以减少输入,从而加快输入速度。这被接受的时间为 1.23 秒,非常推荐这种方法,因为它易于记忆并且速度足够快,可以满足竞争性编码中大多数问题的需求。

实施:

static class FastReader
    {
        BufferedReader br;
        StringTokenizer st;

        public FastReader()
        {
            br = new BufferedReader(new
                     InputStreamReader(System.in));
        }

        String next()
        {
            while (st == null || !st.hasMoreElements())
            {
                try
                {
                    st = new StringTokenizer(br.readLine());
                }
                catch (IOException  e)
                {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt()
        {
            return Integer.parseInt(next());
        }

        long nextLong()
        {
            return Long.parseLong(next());
        }

        double nextDouble()
        {
            return Double.parseDouble(next());
        }

        String nextLine()
        {
            String str = "";
            try
            {
                str = br.readLine();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            return str;
        }
    }

在主文件中:

 public static void main(String[] args)
    {
        FastReader s=new FastReader();
        int n = s.nextInt();
        int k = s.nextInt();
        int count = 0;
        while (n-- > 0)
        {
            int x = s.nextInt();
            if (x%k == 0)
               count++;
        }
        System.out.println(count);
    }

来源Link:https://www.geeksforgeeks.org/fast-io-in-java-in-competitive-programming/