问题标签 [bufferedinputstream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
867 浏览

java - 在 Android/Java 中将 DataInputStream 处理为更新的标准

我在读取原始文件的 Android 应用程序中有这样的方法:

但是,DataInputStream 对象现在似乎已被弃用。我研究了它,听说最好readline()BufferedInputStream. 有人可以帮我完成他的(填写缺失的行)吗?我不确定如何声明brvar。这是我到目前为止所拥有的:

这是调用此方法的前面我尚未触及的代码:

另外,我想确保它适用于 Android 2.3 到 4.2(当前)。谢谢你的帮助。

0 投票
2 回答
23574 浏览

java - 为什么BufferedReader的性能比BufferedInputStream差那么多?

我知道使用 BufferedReader(包装 FileReader)会比使用 BufferedInputStream(包装 FileInputStream)慢得多,因为必须将原始字节转换为字符。但我不明白为什么它这么慢!这是我正在使用的两个代码示例:

和:

我已经尝试过使用各种缓冲区大小的测试,所有这些都是 150 兆字节的文件。以下是结果(缓冲区大小以字节为单位;时间以毫秒为单位):

可以看出,BufferedInputStream 的最快时间(64 毫秒)比 BufferedReader 的最快时间(465 毫秒)快七倍。正如我上面所说,我没有显着差异的问题。但是这么大的差异似乎是不合理的。

我的问题是:是否有人对如何提高 BufferedReader 或替代机制的性能提出建议?

0 投票
4 回答
2569 浏览

java - 如何创建一个新的缓冲读取器对象,该对象从另一个停止的位置开始读取?

我有一个缓冲阅读器,它逐行读取一个大文件以删除重复的行。

而不是将整个文件加载到内存中,我想通过使用两个缓冲读取器来做到这一点:第一个迭代文件的固定部分,将每个部分一个接一个地加载到内存中。

在每次迭代中,第二个缓冲读取器将从第一个缓冲读取器停止的位置到文件末尾检查加载的部分是否不再存在于文件中。

问题是我不能让新的独立缓冲读取器对象(不是引用)从第一个停止的位置开始。

我需要一种方法来找出第一个缓冲阅读器的文件位置,以便我可以告诉第二个缓冲阅读器从哪里开始。

到目前为止我已经尝试过:

将第一个对象发送到第二个的构造函数。

这实际上有效,但两者都有相同的迭代器,所以第一个与第二个一起移动到文件末尾

bufferedReader.mark()设置缓冲阅读器的位置,但我仍然需要知道第一个阅读器的位置。

笔记:

  • 行数不是恒定的
  • 无法将整个文件加载到内存中
  • 时间和记忆都是问题
0 投票
2 回答
7647 浏览

java - 在 Java 中用字节数组替换 BufferedInputStream

以下代码使用 BufferedInputStream 从文件中读取数据并以块的形式对其进行处理。我想修改这段代码,而不是通过流来自文件的数据,我想让它来自字节数组。我已经将文件的数据读入一个字节数组,我想使用这个 while...loop 来处理数组数据,而不是使用文件流中的数据。不知道该怎么做:

0 投票
2 回答
980 浏览

java - Java BufferedInputStream 进度条

我在JProgressBar显示 HTTP 下载状态时遇到了一个小问题。
进度条正在工作,但是它填得太快,最终超出最大值相当多,如下所示:

问题是bytesDownloaded最终比文件末尾的 len 大得多,in.read()实际上是返回文件中最多的字节还是其他值?我假设前者来自 Java 7 API,但它与我的发现不一致。

我正在一个 2.69MB 的文件上测试这个片段。
这是 println 语句的输出(最后几行)

Bytes downloaded: 371525502 out of 2821490
Bytes downloaded: 371525526 out of 2821490
Bytes downloaded: 371525631 out of 2821490
Bytes downloaded: 371525788 out of 2821490
Bytes downloaded: 371526028 out of 2821490
Bytes downloaded: 371526222 out of 2821490
Bytes downloaded: 371526442 out of 2821490
Bytes下载:371526697 出 2821490
字节下载:371526914 出 2821490

现在我知道这2821490是 2.69MB 的正确字节值,所以我的问题仍然存在,为什么read()BufferedInputStream 的函数将文件读取字节的结尾显示为371526914,如果这真的是字节,那么它等于大约 350MB,文件显然是不是!

有任何想法吗?

0 投票
3 回答
222 浏览

java - 读取大文件时执行操作java

我正在用 Java 制作一个聊天程序,我正在通过 TCP 和可序列化对象进行通信。聊天也可以交换文件,但是当文件太大(视频文件)时,界面会冻结,直到它完成文件加载和对象传输过程。我需要在加载文件时显示一条消息。这是我的代码:

我需要在此行“bis.read(byteArray);”时显示一条消息 正在阅读,因为我相信该行是界面冻结的原因。加载 byteArray 后,我将它放在一个对象上并通过套接字连接发送它。

我还需要一个视频流,而不是直播,只是为了在服务器上打开一个视频文件并将其分段发送到连接的客户端并播放。谁能给我教程或提示?谢谢。

0 投票
2 回答
110 浏览

c++ - 从缓冲区读取记录

我有一个巨大的文件要阅读。我有一个 IO 线程,它从磁盘读取数据(4mb)并存储在 6 个元素(每个 4mb)的循环数组中。我有另一个线程从循环缓冲区中读取数据以将数据转换为一些记录。

问题是我可以拥有跨越 2 个不同缓冲区的记录(即,说记录可以从第一个缓冲区的末尾开始并延伸到下一个缓冲区的开头)

我该如何处理这种情况?

你能指出一些示例实现吗?

0 投票
2 回答
867 浏览

java - 如何在java中的文件中写入多次?

我之前提出了同样的问题,但我尝试了所有给定的答案,但没有人选择我的 prog。我创建了一个写入文件的方法,并将通过其他方法使用该文件。我的问题是当我想写另一个时间。我想从文件的开头开始,所以删除内容。这是我使用的课程,if exist delete否则BufferedWriter bw = new BufferedWriter(new FileWriter(f, false));我将只有执行的最后一行。我想如果我不能在某个时间使用某些文件进行读写。

0 投票
1 回答
220 浏览

java - BOS/BIS 取得进展

我有一个 BufferedInputStream 和一个 BufferedOutputStream 的上传,现在我想获得这个上传百分比的进度。

这个怎么弄??

0 投票
2 回答
1304 浏览

java - 从文件中读取字符的最有效方法?

在练习 Java 中的文件 I/O 时,我遇到了一个任务,我必须重写一个方法来查找与给定记录 ID 关联的记录数据。现在,我正在谈论的方法是使用包裹在 BufferedReader 中的 FileReader 来读取字符。奇怪的是,分配本身表明使用 BufferedStreamReader(?) 可能不是从文件中检索字符的最有效方法。考虑到该方法包含 BufferedReader 而不是 BufferedStreamReader,我发现这更加令人困惑。

所以我的问题是,对于 FileReader 使用 BufferedReader 包装器是否已经是读取文件中字符的最有效(就速度而言)方法?

编辑:分配讨论 BufferedStreamReader,而不是 BufferedInputStream