问题标签 [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 投票
1 回答
1061 浏览

java - BufferedInputStream 不适用于文件中的随机搜索

我的文件的写入过程如下(在我称之为非集群的模式下)

  1. 将对象写入文件的当前位置。注意在另一个文件(称为索引文件)中写入的位置,以便我知道我将对象放在哪里。
  2. 通过写入零字节留出一些空间(随机 1/2/3/4 KB 的空间)
  3. 重复步骤 1 和 2

现在我决定从文件中读取对象。但我想用BufferedInputStream. 但是,当我将 a 封装BufferedInputStream在 ObjectInputStream 中时,在读取一些对象后会出现错误。我猜这发生一次缓冲读取之后(即,缓冲区中可以容纳的尽可能多的对象被读取一次,下次我收到错误时)。

另一方面,将 aFileInputStream直接封装在ObjectInputStream作品中没有任何问题。

如果需要,我也会提供文件编写代码。随意询问有关以下代码的任何内容。

}

}

这是导致错误的更改: ois = new ObjectInputStream(new BufferedInputStream(fis, 4096));而不是ois = new ObjectInputStream(fis);

错误是java.io.StreamCorruptionException: invalid type code : 00

编辑 :

我现在已经弄清楚了问题所在。当我的 fis 被定位到一个新位置时,我的 bis 没有被跳到那个新位置。相反,bis 试图仅从旧位置读取,因此例外

0 投票
3 回答
1603 浏览

java - 使用 datainputstream 和 bufferedinputstream 接收文件时陷入无限循环

我正在尝试构建一个使用 DataInputStream 和 BufferedInputStream 从客户端接收文件的服务器程序。

这是我的代码,它陷入了无限循环,我认为这是因为没有使用 available() 但我不太确定。

谁能告诉我为什么它陷入无限循环?如果是因为没有使用 available ,请告诉我如何使用它?我实际上用谷歌搜索,但我对用法感到困惑。非常感谢

0 投票
2 回答
142 浏览

java - 使用 BufferInputStream 下载无法正常工作

以下代码无法下载文件(顺便说一句 clen 是文件的长度):

...但这很好用:

我想知道为什么,即使第二个代码段运行得很快。关于这一点,是否有任何特殊原因使用 byte[] 缓冲区(因为它似乎并不快,而且 BufferedInputStream 已经使用了自己的缓冲区......?)

0 投票
1 回答
3970 浏览

android - 从网络下载图像时如何处理 url 中的空白空间?

我正在做一个项目,其中 url 有时可以有空格(并非总是)例如:www.google.com/example/test.jpg,有时是 www.google.com/example/test.jpg。

我的代码:

失败的是这一行: InputStream input = new BufferedInputStream(url.openStream(), 8192);

带有:java.io.FileNotFoundException。

我试图对特定行进行编码,但这里是踢球者:服务器需要空白空间“”才能找到文件,所以我需要以某种方式拥有空白空间。如果我使用 firefox 浏览器,我可以找到文件 (jpg)。非常感谢任何帮助。

编辑更新:现在我已经尝试将 url 的主机部分之后的每一位编码为 utf-8,并且我尝试使用 + 和 %20 作为空白空间。现在我可以设法对文件进行 DL,但它会出现故障,因此无法读取。

编辑 update2:我在 %20 上犯了一个错误,这很有效。

0 投票
2 回答
1784 浏览

java - BufferedInputStream available() 吃 CPU

我正在从套接字读取消息(通过 TCP 协议),但我注意到 CPU 花费大量时间来调用我的 BufferedInputStream 的方法 available()。这是我的代码:

我也尝试使用 intread=buffer.read()和 checkif (read!=-1)而不是使用可用函数,但在这种情况下,我无法识别消息的结尾......在我的 StringBuilder 'readCharacter' 中,我有不止一条消息,一条在另一个之后......它导致我的解析过程失败......

而是使用available()检查,进入readCharacter我一次只有一条消息......并且解析工作......

你能帮我理解为什么,以及如何避免 CPU 被吃掉吗?

0 投票
1 回答
1076 浏览

java - 从另一个类写入 BufferedReader

我需要一种方法来写入另一个类的 BufferedReader 输入。

在 AI 类中,使用BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));andstr = stdin.readLine();从用户那里获取输入,然后用户获取该输入,对其进行格式化并使用System.out.println.

现在我发现我想从 B 类向 A 类提供一些输入,以便 A 类可以做这件事并将其打印出来。

有没有办法做到这一点?

0 投票
2 回答
637 浏览

java - Java 下载任何页面 - 包括 404、错误消息页面?

我已经使用 URLconnection.connect 和 BufferedInputStream(connection.getInputStream()) 来下载页面,但不幸的是,它似乎无法下载任何 404 页面或任何其他错误消息页面,而是引发异常。有没有办法改变这种行为并获得在浏览器中显示的错误消息?

0 投票
4 回答
2670 浏览

java - 使用 Java 的 BufferedInputStream 将大文件存储到 MySQL 数据库时出现 java.lang.outOfMemoryError

我目前正在尝试使用 java 在 MySQL 5.5 数据库上存储大文件。我的主要课程称为 FileDatabaseTest。它有以下方法:

数据库只有一个表 - “FILES”表,它有以下列。

该程序在上传小文档时运行良好,但是当我上传像 20MB 这样的文件时,上传过程很慢。所以我尝试在下面的代码中将 FileInputStream 放在 BufferedInputStream 中:

上传过程变得非常快。它就像只是将文件复制到另一个目录。但是当我尝试上传超过 400mb 的文件时,出现以下错误:

所以我尝试使用嵌入式 Apache-Derby 数据库而不是 MySQL,但没有收到错误。我能够使用 BufferedInputStream 在 Derby 数据库中上传 500MB 到 1.5G 的文件。我还观察到,在 MySQL 服务器上使用 BufferedInputStream 上传大文件时,JVM 正在消耗大量内存,而当我在 Derby 数据库中使用它时,JVM 的内存使用量保持在 85MB 到 100MB 左右。

我对 MySQL 比较陌生,我只是使用它的默认配置。我在其配置中唯一更改的是“max_allowed_pa​​cket”大小,因此我最多可以将 2GB 文件上传到数据库。所以我想知道错误来自哪里。它是 MySQL 的错误还是 MySQL 连接器/J 的错误?还是我的代码有问题?

我在这里想要实现的是能够使用 java 将大文件(最大 2GB)上传到 MySQL 服务器,而不会增加 java 堆空间。

0 投票
1 回答
1223 浏览

java - java中如何通过socket传输整数或字节数组

是的,我确实看过 sun 上的教程,但它们对我没有帮助,只传输了第一个命令。

我有一个方法

在发送方,并且

在接收端。它可以完美地发送一个字符或一个字符的ASCII码。我需要更改此代码以发送整数或仅发送字节数组而不是字符。如果我只留下 InputStream 和 OutputStream 它确实接收到第一个命令,仅此而已,而这些方法不断接收通过 sendTo 发送的内容。即使在套接字文档中,它们也只有发送字符的示例。

0 投票
3 回答
1809 浏览

java - 如何终止 BufferedInputStream .read() 调用

我正在编写一个程序来从服务器下载非常大的文件(~2GB)。我已经编写了能够恢复部分完成下载的程序,

为了模拟糟糕的互联网连接,我在下载过程中一直将以太网线从路由器中拔出。不幸的是,这导致我的程序挂起以下调用: while((bytesRead = in.read(data)) > 0)

(其中 bytesRead 是一个 int,in 是一个从 HttpURLConnection 构建的 BufferedInputStream,而 data 是一个字节数组)。

我试图通过在另一个线程上调用 in.close() 来“中断”调用,但在互联网连接恢复之前它没有效果(此时抛出异常)。

有什么办法可以防止断开的互联网连接冻结我的程序?