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

时间:2015-11-03 18:17:39

标签: java java.util.scanner bufferedreader inputstreamreader

在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程序员以非常不同的方式接受输入。他们有点创建自己的读者课程。我不明白他们的程序在运行时变得如此快。

5 个答案:

答案 0 :(得分:3)

来自dejavu的引用: “BufferedReader比Scanner快很多,因为它可以缓冲字符,因此每次你想从中读取字符时都不必访问该文件。

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

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

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

答案 1 :(得分:3)

在下面的文章中,作者讨论了在命令行环境(也称为“控制台”)中从用户读取输入的三种不同方法。每种方式都相当容易使用,也有自己的优点和缺点。

讨论了以下机制并提供了示例。 还有一个利弊部分。

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

链接: Most Efficient Way of Taking User Input in Java

选项:

扫描仪类 - >

  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());

答案 2 :(得分:3)

如果你想要一个快速方式通过stdin输入(如果我理解你正确,你想要一个快速的方法来重复输入你的程序的输入),你最好的选择是管道或重定向固定响应,例如

$ java MyReadingClass < mycannedinput.txt

所以你可以构建你的类来通过stdin获取交互式输入,然后使用简单的shell重定向来输入预设输入,这样你就不必每次都重新输入它。

答案 3 :(得分:1)

在java中采用userinput进行特别有竞争力的编码的最快方法是使用 bufferedReader和StringTokenizer 制作自己的FastReader类。

此方法使用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);
    }

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

答案 4 :(得分:0)

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

https://stackoverflow.com/a/49957378/5076337

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