- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的以下问题非常简单。
这是我的代码:
public class Protocol implements Runnable {
private SSLSocket socket = null;
private InputStream is = null;
private OutputStream os = null;
...
public Protocol(Socket s) {
socket = (SSLSocket)s;
is = socket.getInputStream();
os = socket.getOutputStream();
}
@Override
public void run() {
...
ping();
socket.close();
...
}
public void ping() {
BufferedWriter writer;
try {
writer = new BufferedWriter(new OutputStreamWriter(os));
writer.write("OK");
}
catch (IOException e) { System.out.println("ERROR: " + e.getLocalizedMessage()); }
finally { writer = null; }
}
我知道我没有包含很多源代码,但这应该足以回答这个问题。如您所见,在“ping”方法中,我创建了一个 BufferedWriter,用于将“OK”字符串写入远程源。稍后,我关闭套接字。
所以我的简单问题是——据我了解,由于我关闭了套接字,链条应该是这样的:
Close socket ----> 关闭 is 和 os ----> 关闭 writer
因此,通过关闭 Socket,我也关闭并允许 BufferedWriter 被 GC 释放。我是理解正确还是做错了什么?对于我在其他方法(即 BufferedInputStream)中初始化的所有作者和读者来说都是这样吗?通过在方法结束时将这些变量设置为 null,我是否在帮助 GC 区分应该释放的内容?或者我不应该这样做?
谢谢!
最佳答案
From what I understand, since I close the socket, the chain should go like this:
Close socket ----> which closes is and os ----> closes writer
没有。 BufferedWriter
包裹在套接字输出流周围,但套接字不知道这一点。它无法关闭它。
So, by closing the Socket, I am also closing and allowing the BufferedWriter to be freed by the GC.
没有也没有。 BufferedWriter
在 ping()
返回后立即可用于 GC,并且它永远不会关闭。
Am I understanding this correctly
没有。
or doing something wrong?
是的。您不应该为每条消息创建一个新的 BufferedWriter
。您应该在套接字的整个生命周期内使用同一个套接字,并关闭它 而不是套接字。同样,您应该在套接字的生命周期内只使用一个输入流或 Reader。否则,您可能会丢失其缓冲区中的数据。
Is this true for all writers and readers that I initialize in other methods (i.e. BufferedInputStream).
没有。
And by setting these variables null at the end of the method, am I helping the GC to distinguish between what should be freed?
没有。你只是在浪费时间和空间。该方法无论如何都即将退出,因此它的所有局部变量都消失了。
Or should I not do this?
你不应该做任何事情。
关于java - 使用流关闭套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31930930/
我使用下拉菜单提供一些不同的链接,但我希望这些链接在同一选项卡中打开,而不是在新选项卡中打开。这是我找到的代码,但我对 Javascript 非常缺乏知识 var urlmenu = docume
我对 javascript 不太了解。但我需要一个垂直菜单上的下拉菜单,它是纯 JavaScript,所以我从 W3 复制/粘贴脚本:https://www.w3schools.com/howto/t
我已经坐了 4 个小时,试图让我的导航显示下 zipper 接垂直,但它继续水平显示它们。我无法弄清楚为什么会发生这种情况或如何解决它。 如果有人能告诉我我做错了什么,我将不胜感激。我有一个潜移默化的
我正在尝试创建选项卡式 Accordion 样式下拉菜单。我使用 jQuery 有一段时间了,但无法使事件状态达到 100%。 我很确定这是我搞砸的 JS。 $('.service-button').
对于那些从未访问过 Dropbox 的人,这里是链接 https://www.dropbox.com/ 查看“登录”的下拉菜单链接。我如何创建这样的下 zipper 接? 最佳答案 这是 fiddle
我正在制作一个 Liferay 主题,但我在尝试设计导航菜单的样式时遇到了很多麻烦。我已经为那些没有像这样下拉的人改变了导航链接上的经典主题悬停功能: .aui #navigation .nav li
如果您将鼠标悬停在 li 上,则会出现一个下拉菜单。如果您将指针向下移至悬停时出现的 ul,我希望链接仍然带有下划线,直到您将箭头从 ul 或链接移开。这样你就知道当菜单下拉时你悬停在哪个菜单上。 知
我有一个带有多个下拉菜单的导航栏。因此,当我单击第一个链接时,它会打开下拉菜单,但是当我单击第二个链接时,第一个下拉菜单不会关闭。 (所以如果用户点击第二个链接我想关闭下拉菜单) // main.js
我正在尝试制作一个导航下拉菜单(使用 Bootstrap 3),其中链接文本在同一行上有多个不同的对齐方式。 在下面的代码中,下拉列表 A 中的链接在 HTML 中有空格字符来对齐它们,但是空白被忽略
我希望有人能帮我解决这个 Bootstrap 问题,因为我很困惑。 有人要求我在底部垂直对齐图像和其中包含图像的链接。 我面临的问题是他们还希望链接在链接/图像组合上具有 pull-right,这会杀
我正在构建一个 Rails 应用程序,并希望指向我的类的每个实例的“显示”页面的链接显示在“索引”页面的下拉列表中。我目前正在使用带有 options_from_collection_for_sele
我有以下 Bootstrap3 导航菜单 ( fiddle here )。我想设置“突出显示”项及其子链接与下拉列表 1 和 2 链接不同的链接文本(和悬停)的样式。我还希望能够以不同于 Highli
我对导航栏中的下拉菜单有疑问。对于普通的导航链接(无下拉菜单),我将菜单文本放在 H3 中,但是当我尝试对下 zipper 接执行相同操作时,箭头不在标题旁边,而是在标题下方。我决定用 span 替换
我是一名优秀的程序员,十分优秀!