- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
Java 中的 I/O 流是我在编程中最容易被误解的概念。
假设,我们从套接字连接获取输入流:
DataInputStream in = new DataInputStream(clientSocket.getInputStream());
当我从远程服务器获取数据时,以下哪项描述正确?
数据存储在in
变量中。当额外的数据来自服务器时,它会附加到 in
中,增加其大小。然后我们可以通过这种方式从 in
变量中读取数据:
byte[] messageByte = new byte[1000];
boolean end = false;
String dataString = "";
while(!end)
{
bytesRead = in.read(messageByte);
messageString += new String(messageByte, 0, bytesRead);
if (messageString.length == 100)
{
end = true;
}
}
in
只是指向数据源的链接,并不包含数据本身。当我们调用in.read(messageByte)
1000字节从套接字复制到bytesRead
?
或者,假设我们有流连接到 HDD 上的文件,而不是套接字。当我们调用 in.read(messageByte)
时,我们从 HDD 读取了 1000 个字节,是吗?
哪种方法是正确的?我倾向于认为它是#2,但如果是的话,套接字盒中的数据存储在哪里?当我们读取 1000 个字节时,远程服务器是否在等待,然后再次发送额外的数据?还是来自服务器的数据存储在操作系统的某个缓冲区中?
最佳答案
- Data stored in in variable.
没有。
When extra data comes from server, it appends to in, increase it size. And then we can read data from in variable that way:
byte[] messageByte = new byte[1000];
boolean end = false;
String dataString = "";
while(!end)
{
bytesRead = in.read(messageByte);
messageString += new String(messageByte, 0, bytesRead);
if (messageString.length == 100)
{
end = true;
}
}
没有。见下文。
in
is only link to source of data, and don't contains data themselves.
正确。
And when we call
in.read(messageByte);
1000 bytes copy from socket to bytesRead?
没有。它阻塞直到:
以先发生者为准。请参阅 Javadoc。
(Instead socket, we can have stream connected to file on HDD, and when we call in.read(messageByte) we read 1000 bytes from HDD. Yes?)
没有。同上。
What approach right?
两者都不是。从输入流中读取的正确方法是循环,直到您拥有您期望的所有数据,或者 EOS 或发生异常。您不能依赖 read()
来填充缓冲区。如果需要,请使用 DataInputStream.readFully()
。
I tend to 2
这没有意义。你没有选择。 (1) 和 (2) 不是编程范例,它们是关于流实际如何工作的问题。如何编写代码的问题与此不同。
where data stored in socket?
其中一些在内核中的套接字接收缓冲区中。大部分还没到。没有一个是“在套接字中”。
Or remote server waiting when we read 1000 bytes, and then send extra data again?
没有。服务器通过其套接字发送缓冲区将数据发送到您的套接字接收缓冲区中。您的读取和服务器的写入彼此非常分离。
Or data from server stored in any buffer in operating system?
是的,套接字接收缓冲区。
关于Java 理解 I/O 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33029597/
在使用 requests 库中的状态代码时,我遇到了一些奇怪的事情。每个 HTTP 状态代码都有一个常量,有些具有别名(例如,包括 200 的复选标记): url = 'https://httpbin
这是我得到的代码,但我不知道这两行是什么意思: o[arr[i]] = o[arr[i]] || {}; o = o[arr[i]]; 完整代码: var GLOBAL={}; GLOBAL.name
所以这个问题的答案What is the difference between Θ(n) and O(n)? 指出“基本上,当我们说算法是 O(n) 时,它也是 O(n2)、O(n1000000)、O
这是一个快速的想法;有人会说 O(∞) 实际上是 O(1) 吗? 我的意思是它不依赖于输入大小? 所以在某种程度上它是恒定的,尽管它是无限的。 或者是唯一“正确”的表达方式 O(∞)? 最佳答案 无穷
这是真的: log(A) + log(B) = log(A * B) [0] 这也是真的吗? O(log(A)) + O(log(B)) = O(log(A * B)) [1] 据我了解 O(f
我正在解决面试练习的问题,但我似乎无法找出以下问题的时间和空间复杂度的答案: Given two sorted Linked Lists, merge them into a third list i
我了解 Big-Oh 表示法。但是我该如何解释 O(O(f(n))) 是什么意思呢?是指增长率的增长率吗? 最佳答案 x = O(n)基本上意味着 x <= kn对于一些常量 k . 因此 x = O
我正在编写一个函数,该函数需要一个对象和一个投影来了解它必须在哪个字段上工作。 我想知道是否应该使用这样的字符串: const o = { a: 'Hello There' }; funct
直觉上,我认为这三个表达式是等价的。 例如,如果一个算法在 O(nlogn) + O(n) 或 O(nlogn + n) 中运行(我很困惑),我可以假设这是一个O(nlogn) 算法? 什么是真相?
根据 O'Reilly 的 Python in a Nutshell 中的 Alex Martelli,复杂度类 O(n) + O(n) = O(n)。所以我相信。但是我很困惑。他解释说:“N 的两个
O(n^2)有什么区别和 O(n.log(n)) ? 最佳答案 n^2 的复杂性增长得更快。 关于big-o - 大 O 符号 : differences between O(n^2) and O(n
每当我收到来自 MS outlook 的电子邮件时,我都会收到此标记 & nbsp ; (没有空格)哪个显示为?在 <>. 当我将其更改为 ISO-8859-1 时,浏览器页面字符集编码为 UTF-8
我很难理解 Algorithms by S. Dasgupta, C.H. Papadimitriou, and U.V. Vazirani - page 24 中的以下陈述它们将 O(n) 的总和表
我在面试蛋糕上练习了一些问题,并在问题 2给出的解决方案使用两个单独的 for 循环(非嵌套),解决方案提供者声称他/她在 O(n) 时间内解决了它。据我了解,这将是 O(2n) 时间。是我想错了吗,
关于 Java 语法的幼稚问题。什么 T accept(ObjectVisitorEx visitor); 是什么意思? C# 的等价物是什么? 最佳答案 在 C# 中它可能是: O Accept(
假设我有一个长度为 n 的数组,我使用时间为 nlogn 的排序算法对它进行了排序。得到这个排序后的数组后,我遍历它以找到任何具有线性时间的重复元素。我的理解是,由于操作是分开发生的,所以时间是 O(
总和 O(1)+O(2)+ .... +O(n) 的计算结果是什么? 我在某处看到它的解决方案: O(n(n+1) / 2) = O(n^2) 但我对此并不满意,因为 O(1) = O(2) = co
这个问题在这里已经有了答案: 11 年前关闭。 Possible Duplicate: Plain english explanation of Big O 我想这可能是类里面教的东西,但作为一个自学
假设我有两种算法: for (int i = 0; i 2)更长的时间给定的一些n - 其中n这种情况的发生实际上取决于所涉及的算法 - 对于您的具体示例, n 2)分别时间,您可能会看到: Θ(n)
这个问题在这里已经有了答案: Example of a factorial time algorithm O( n! ) (4 个回答) 6年前关闭。 我见过表示为 O(X!) 的 big-o 示例但
我是一名优秀的程序员,十分优秀!