问题标签 [bufferedoutputstream]

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 回答
1074 浏览

java - 使用 BufferedOutputStreams 时 ObjectInputStream 不会初始化

我正在尝试通过套接字发送对象以进行游戏,但它们需要很长时间才能发送并且可能导致游戏挂起。我想使用 BufferedOutputStreams 和 BufferedInputStreams 来发送数据,但是当我在客户端使用 BufferedOutputStream 时,我的 ObjectInputStream 不会在服务器端初始化。奇怪的是没有抛出任何错误。

我只提供所涉及的代码,因为要花很长时间来解释发生了什么。每个游戏初始化两个客户端。

我已经浏览了所有论坛,但找不到任何有用的东西,这让我认为我正在做一些非常新手的事情。谢谢你提供的所有帮助!

0 投票
1 回答
9855 浏览

java - 套接字:BufferedOutputStream 还是只是 OutputStream?

为了在 Java 中通过 TCP 获得最快的传输速度,最好:

选项 A:

选项 B:

我已经读到将超过 8 KiB 的数据写入 OutputStream 时性能会受到影响,建议将其以小块的形式写入,而不是一次写入 8 KiB。8 KiB 是 BufferedOutputStream 的默认缓冲区大小。

但是,我还读到,在通过网络传输数据时,最好尽快清除字节。这意味着使用缓冲区和小块写入会增加不必要的开销。

那么,选项A还是选项B?哪个效果最好?

现在我猜选项 A 提供最高的传输速度,同时比选项 B 消耗更多的 CPU。选项 B 可能会更好,因为它不会慢很多,但节省了大量的 CPU。

--

额外问题:触摸 TCP 窗口大小是个好主意吗?例如,将其设置为 64 KiB:

我尝试在测试机器上将其设置为 128 KiB,因为我读到它可以提高速度,但是当服务器有几个连接时,CPU 处于 100%,而不是像我不理会它时的 ~2%。我猜 128 KiB 太高了,除非你有一个可以处理流量高峰的好服务器,但是将它设置为 32 KiB 是否明智?我认为我的默认值是 8 KiB。

(“套接字”是“java.net.Socket”)

0 投票
2 回答
1097 浏览

java - 合并文件时BufferOutputStream写入零字节

我正在尝试将n个文件合并为单个文件。但是我的功能出现了奇怪的行为。该函数在n秒内被调用x次。假设我有 100 个文件要合并,每秒我调用 5 个文件并合并它。在下一秒,数量翻倍为 10,但从 1-5 是与之前相同的文件,其余的是新文件。它工作正常,但在某些时候,它给出零字节或有时给出正确的大小。

您能帮我找出下面函数中的错误吗?

*对不起我的英语不好

0 投票
1 回答
2465 浏览

java - java Socket类中的sendbuffersize可以设置多大?

我有一个使用 FTP 库传输文件的应用程序。接收文件效果很好,主要是发送文件。当我尝试发送应用程序挂起的大文件 (3 MB) 时,就会出现问题。没有错误信息,什么都没有。我已经调试过,发现它停socketWrite0()java.net.SocketOutputStream. 此方法永远不会返回,而只是挂起/阻塞。调用自: 文件开始传输,但第二次调用传输线程在到达 socketWrite0() 方法时停止并挂起。我已经尝试通过在其构造函数中发送一个参数来调整 BufferedOutputStream 中的缓冲区大小,看起来这个大小是多少并不重要,它总是在第二次刷新时停止。
java.io.BufferedOutputStream write() which calls
java.io.BufferedOutputStream flushBuffer() which calls
java.net.SocketOutputStream write() which calls
java.net.SocketOutputStream socketWrite() which calls
java.net.SocketOutputStream socketWrite0()

java.io.BufferedOutputStream flushBuffer()

然后我尝试将 Socket setSendBufferSize 设置为 3 000 000,突然间一切正常,BufferedOutputStream 大小为默认值。只要我将此缓冲区大小设置为大于文件传输的文件大小,一切都很好!如果我将缓冲区大小设置为 400 000,则在转移此金额后转移停止。

我无法无限制地增加 BufferedOutputStream 缓冲区。如果我将它设置得太大,也会发生同样的事情:应用程序在 socketWrite0() 处挂起。

  1. 谁能解释为什么?
  2. Socket 缓冲区大小可以有多大?极限是多少?
  3. BufferedOutputStream 缓冲区和 Socket 缓冲区有什么关系?

非常感谢!

0 投票
1 回答
167 浏览

java - 为什么它不读取行终止符 ''\n'

此代码正在尝试读取文件,然后将其反转为输出文件。当它写入(不反转)时,输出是相同的。但是当它被反转时,输出将全部写入输出文件的 ONE 行。

我正在使用BufferedInputStreamBufferedOutputStream

0 投票
2 回答
1665 浏览

logback - 如何更改 logback 的 FileAppender 使用的 BufferedOutputStream 的底层缓冲区大小?

我们使用 logback 作为我们的日志框架。我们注意到 FileAppender 使用由 BufferedOutputStream 支持的 ResilientFileOutputStream。我们想知道是否有办法配置这个 BufferedOutputStream 实例的缓冲区大小,以便我们可以调整 logback 的性能。

谢谢

0 投票
1 回答
69 浏览

java - Java Micro Edition 3.2 SDK 替代 BufferedOutputStream

Java Micro Edition SDK 不包含 java.io.BufferedOutputStream。有谁知道 SDK 中存在合适的替代品?

http://docs.oracle.com/javase/1.5.0/docs/api/java/io/BufferedOutputStream.html

谢谢,

亚当

0 投票
1 回答
220 浏览

java - BOS/BIS 取得进展

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

这个怎么弄??

0 投票
0 回答
257 浏览

java - 如何使用 BufferedOutputStream 编写部分标头?

我想使用 BufferedOutputStream 写入 ~20000 字节以替换偏移 OFFSET 处相同数量的文件字节。我尝试使用以下代码执行此操作:

但是,这会导致 'file.dat' 被 ba 的内容覆盖,覆盖整个文件并使其仅与 .dat 一样大ba。我究竟做错了什么?

0 投票
2 回答
953 浏览

java - Java,用socket发送和接收文件:有必要使用bufferedinputstream和bufferedoutputstream吗?

我正在尝试在客户端-服务器应用程序中编写两种使用 java 套接字发送和接收文件的方法,但我有一些疑问:

我使用FileInputStreamFileOutputStream。是BufferedInputStreamBufferedOutputStream更好?

我不明白BufferedInputStreamand的必要性BufferedOutputStream

在第一种方法中,我使用了一个 1024 字节的缓冲区,首先我FileInputStream.read(byte[] b)DataOutputStream.write(byte[] b, int off, int len).

在第二种方法同上:首先我用 填充缓冲区,DataInputStream.read(byte[] b)然后用FileOutputStream.write(byte[] b, int off, int len).

那么为什么要使用BufferedInputStreamandBufferedOutputStream呢?这样,如果我了解它们的工作原理,我会先在缓冲区中写入字节,然后再BufferedInputStreamBufferedOutputStream缓冲区中复制字节。