使用 DataInputStream 从文件读取非常慢

2024-04-17

我有一个包含大量数字的文件。

我尝试使用以下代码从文件中读取它,但是速度非常慢,任何人都可以帮助减少时间吗?

以下是我以非常慢的方式读取它的代码:

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;

public class FileInput {

  public static void main(String[] args) {

    Scanner scan1 = new Scanner(System.in);
    String filename = scan1.nextLine();

    File file = new File(filename);
    FileInputStream fis = null;
    BufferedInputStream bis = null;
    DataInputStream dis = null;

    try {
          fis = new FileInputStream(file);

      bis = new BufferedInputStream(fis);
      dis = new DataInputStream(bis);

      while (dis.available() != 0) {

        System.out.println(dis.readLine());
      }

      fis.close();
      bis.close();
      dis.close();

    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

不要使用DataInputStream从文件中读取行。相反,使用BufferedReader, as in:

fis = new FileInputStream(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
while ((String line = reader.readLine()) != null) {
  System.out.println(line);
}

javadoc 上DataInputStream.readLine告诉你不要使用该方法。 (它已被弃用)

当然,当你真正开始阅读这些数字时,我鼓励你忘记自己阅读这些行,而只是让Scanner为您读出这些数字。如果您需要知道哪些数字位于同一行,Scanner也可以为你做到这一点:

Scanner fileScanner = new Scanner(file, "UTF-8").useDelimiter(" +| *(?=\\n)|(?<=\\n) *");
while (fileScanner.hasNext()) {
  List<Integer> numbersOnLine = new ArrayList<Integer>();
  while (fileScanner.hasNextInt()) {
    numbersOnLine.add(fileScanner.nextInt());
  }
  processLineOfNumbers(numbersOnLine);
  if (fileScanner.hasNext()) {
    fileScanner.next(); // clear the newline
  }
}

那个奇特的正则表达式使得行之间的换行符也显示为标记Scanner.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 DataInputStream 从文件读取非常慢 的相关文章

  • 按下按钮并在java中的新窗口中打开文件

    我创建了一个 JFrame 并放置了一个文本字段和按钮 在文本字段中我放置了从文本文件读取的名称 我知道我想单击按钮并打开一个已知窗口 我想在其中放置名称 其他信息来自同一个文件 这是我的代码 这是我的主框架 package Fronten
  • 有没有创建 Cron 表达式的 Java 代码? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要一个 Java 代码来根据用户输入创建一个 cron 表达式 用户输入是时间 频率和执行次数 只需从评论中添加 自己创建 即可
  • 两个整数乘积的模

    我必须找到c c a b mod m a b c m 是 32 位整数 但 a b 可以超过 32 位 我正在尝试找出一种计算 c 的方法 而不使用 long 或任何 gt 32 位的数据类型 有任何想法吗 如果m是质数 事情可以简化吗 注
  • Android:文本淡入和淡出

    我已阅读此 stackoverflow 问题和答案 并尝试实现文本淡入和淡出 Android中如何让文字淡入淡出 https stackoverflow com questions 8627211 how to make text fade
  • 什么是抽象类? [复制]

    这个问题在这里已经有答案了 当我了解抽象类时 我说 WT H 问题 创建一个无法实例化的类有什么意义呢 为什么有人想要这样的课程 什么情况下需要抽象类 如果你明白我的意思 最常见的是用作基类或接口 某些语言有单独的interface构建 有
  • 如何在 Spring 中使 @PropertyResource 优先于任何其他 application.properties ?

    我正在尝试在类路径之外添加外部配置属性资源 它应该覆盖任何现有的属性 但以下方法不起作用 SpringBootApplication PropertySource d app properties public class MyClass
  • Android 无法解析日期异常

    当尝试解析发送到我的 Android 客户端的日期字符串时 我得到一个无法解析的日期 这是例外 java text ParseException 无法解析的日期 2018 09 18T00 00 00Z 位于 偏移量 19 在 java t
  • Sun 在 EDT 之外做 GUI 工作的演示?

    我正在看SplashDemo java http download oracle com javase tutorial uiswing examples misc SplashDemoProject src misc SplashDemo
  • 将人类日期(当地时间 GMT)转​​换为日期

    我正在服务器上工作 服务器正在向我发送 GMT 本地日期的日期 例如Fri Jun 22 09 29 29 NPT 2018在字符串格式上 我将其转换为日期 如下所示 SimpleDateFormat simpleDateFormat ne
  • Akka 与现有 java 项目集成的示例

    如果我已经有现有的javaWeb 应用程序使用spring and servlet容器 将 Akka 集成到其中的正确方法是什么 就像我将会有Actor1 and Actor2互相沟通的 开始使用这些演员的切入点是什么 例如 1 把它放在那
  • 提高 PostgreSQL 1 亿数据左连接查询性能

    我在用Postgresql 9 2 version Windows 7 64 bit RAM 6GB 这是一个Java企业项目 我必须在我的页面中显示订单相关信息 有三个表通过左连接连接在一起 Tables TV HD 389772 行 T
  • 蓝牙发送和接收文本数据

    我是 Android 开发新手 我想制作一个使用蓝牙发送和接收文本的应用程序 我得到了有关发送文本的所有内容逻辑工作 但是当我尝试在手机中测试它时 我看不到界面 这是Main Activity Code import android sup
  • 如何在JPanel中设置背景图片

    你好 我使用 JPanel 作为我的框架的容器 然后我真的想在我的面板中使用背景图片 我真的需要帮助 这是我到目前为止的代码 这是更新 请检查这里是我的代码 import java awt import javax swing import
  • 在 Spring 上下文中查找方法级自定义注释

    我想知道的是 所有的类 方法Spring http en wikipedia org wiki Spring Framework注释为 Versioned的bean 我创建了自定义注释 Target ElementType METHOD E
  • 手动设置Android Studio的JDK路径

    如何为 Android Studio 使用自定义 JDK 路径 我不想弄乱 PATH 因为我没有管理员权限 是否有某个配置设置文件允许我进行设置 如果您查看项目设置 您可以从那里访问 jdk 在标准 Windows 键盘映射上 您可以在项目
  • Android S8+ 警告消息“不支持当前的显示尺寸设置,可能会出现意外行为”

    我在 Samsung S8 Android 7 中收到此警告消息 APP NAME 不支持当前的显示尺寸设置 可能会 行为出乎意料 它意味着什么以及如何删除它 谢谢 通过添加解决supports screens 机器人 xlargeScre
  • 列表过滤器内的 Java 8 lambda 列表

    示例 JSON id 1 products id 333 status Active id 222 status Inactive id 111 status Active id 2 products id 6 status Active
  • java XMLSerializer 避免复杂的空元素

    我有这个代码 DocumentBuilderFactory factory DocumentBuilderFactory newInstance DocumentBuilder builder factory newDocumentBuil
  • MiniDFSCluster UnsatisfiedLinkError org.apache.hadoop.io.nativeio.NativeIO$Windows.access0

    做时 new MiniDFSCluster Builder config build 我得到这个异常 java lang UnsatisfiedLinkError org apache hadoop io nativeio NativeIO
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐

  • 静态初始化顺序惨败

    我在一本书中读到有关 SIOF 的内容 它给出了一个例子 file1 cpp extern int y int x y 1 file2 cpp extern int x int y x 1 现在我的问题是 在上面的代码中 会发生以下情况吗
  • 为什么 CAP_NET_RAW 不能与 SO_BINDTODEVICE 一起使用?

    我有以下简单的测试程序来创建 UDP 套接字并将其绑定到特定接口SO BINDTODEVICE这样我就可以bind it so INADDR ANY专门接收该接口上的 UDP 广播 filename bindtest c include
  • 如何在C++中的cudaDeviceReset()之后重用tensorflow?

    我正在使用 C 开发一个大型 CUDA 应用程序 该应用程序运行各种模型 需要完全释放所有 GPU 内存 否则其他操作将失败 我能够在关闭所有 tf 会话并运行 cudaDeviceReset 后释放所有内存 但之后我无法运行任何新的张量流
  • web.py 处理程序类的参数

    有没有办法将参数传递给 web py 处理程序类构造函数 例如 这些参数可能来自命令行 当运行主 web py 脚本时 位于第一个参数 用作端口号 之后 当然 具体取决于你的意思 毕竟都是Python 考虑你有可用的web config这是
  • dplyr - ifelse 在 mutate 内使用列表

    给定一个数据框df像下面这样 text lt model var value M1 a 12211 M1 b1 10 21 M1 b2 5 07 M1 c1 41 8 M1 c2 58 2 M1 d 1 6 M2 a 11922 M2 b1
  • 什么时候使用 NSDecimal、NSDecimalNumber 而不是 double 更好?

    对于简单的用途 例如跟踪 65 1kg 等重量值 使用 NSDecimal NSDecimalNumber 比使用 double 有什么好处吗 我的理解是 在这种情况下 双精度 甚至浮点 提供了足够的精度 如果我错了 请纠正我 首先 阅读乔
  • 将对象实例替换为 C# 中的另一个对象实例

    在这个问题中 我想知道这是否以及如何可能 这种技术看起来非常糟糕 但似乎我正在使用的 API UnityEditor 正在做类似的事情 我只是好奇 如果对同一个对象有多个引用 是否可以将一个新对象实例化到同一个内存槽中 以便所有先前的引用都
  • 我应该选择哈希、对象还是数组来表示 Perl 中的数据实例?

    我一直想知道这个问题 但从未真正深入研究过 情况是这样的 我有一组比较大的数据实例 每个实例都有相同的集合或属性 例如 a child instance name age height weight hair color favorite
  • 如何在远程Tomcat上部署war

    我想使用 maven tomcat 插件在远程 Tomcat 上部署 WAR 但遇到问题并出现异常 如下所述 请指导 使用的命令 mvn tomcat redeploy 错误日志 ERROR Failed to execute goal o
  • conda init 在 Windows 上的 bash 中不起作用

    我在 Windows 上安装了 Git Bash 和 conda 它提供了两个程序 C Program Files Git git bash exe and C Program Files Git bin bash exe 后者 C Pro
  • 在 Mac OS X 上静态嵌入 Python 时动态符号查找失败

    我正在构建一个嵌入 Python 的 Mac OS X 应用程序 从技术上讲 我的应用程序是一个捆绑包 即它的主要可执行文件是 MH BUNDLE 它是另一个应用程序的插件 我希望它静态嵌入 Python 但希望能够动态加载扩展 我做了以下
  • 如何防止 Safari 在遵循同源重定向时删除授权标头?

    Safari 似乎放弃了Authorization遵循同源 301 重定向时的标头 例如这段JS代码 fetch api endpoint that redirects headers new Headers Authorization s
  • 核心 jQuery 库的单元测试

    它们是否存在 如果存在 文档和代码在哪里 它们位于 Git 的 test 目录中 https github com jquery jquery tree master test https github com jquery jquery
  • Web 组件中的模板 html 和模板字符串

    使用 html 模板 然后 html 导入 创建 Web 组件还是使用模板字符串更好 这些方法有何优缺点 Using html 模板文件更好地重用 同一个文件可以在不同的 Web 组件中使用 此外 它们在大多数 IDE 中都能更好地显示 因
  • 使用 Office365 日历 API 无法获取会议室的所有繁忙时间

    尝试获取日历事件 以便允许用户选择与会者和会议室可用的会议时间 我们正在使用 Outlook 日历 REST API v2 findMeetingTimes https msdn microsoft com en us office off
  • 将函数应用于数据框列表中的列并附加结果

    我想将函数应用于数据框列表 该函数从每个数据框中的两列中获取元素 将它们相加 然后将输出添加到新列中的每个数据框中 创建虚拟数据 df 1 lt data frame data cbind rnorm 5 0 rnorm 5 2 rnorm
  • 在已打开的网页上运行测试用例

    我想通过量角器运行我的测试用例 但由于某些限制 我希望量角器在已经打开的页面上启动 这意味着我不希望驱动程序通过加载 chrome 并转到测试用例中定义的 url 来启动 如果我可以使用屏幕上已打开的 url 然后使用测试用例中定义的内容进
  • 在 RapidJson 中循环数组并获取对象元素

    如何从 ConstrValueIterator 中获取值 在这种情况下 我知道数组的元素是字典 也称为对象 代码总结 for rapidjson Value ConstValueIterator itr rawbuttons Begin i
  • 是否有一个函数可以查找字符向量中的所有小写字母?

    我刚刚写了一个 但我想知道 R 中是否已经存在一个 顺便说一句 这是函数 欢迎提出改进建议 set seed 50 x lt sample c letters LETTERS 7 is lower lt function x unlist
  • 使用 DataInputStream 从文件读取非常慢

    我有一个包含大量数字的文件 我尝试使用以下代码从文件中读取它 但是速度非常慢 任何人都可以帮助减少时间吗 以下是我以非常慢的方式读取它的代码 import java io BufferedInputStream import java io