gpt4 book ai didi

Java 将 BufferedOutputStream 存储在数组中

转载 作者:行者123 更新时间:2023-12-01 23:29:49 26 4
gpt4 key购买 nike

在Java中,我试图将服务器制作的每个BufferedOutputStream存储到线程之外的数组中,以便向所有连接的客户端广播一些数据。

// initialisation
ArrayList<BufferedOutputStream> connections = new ArrayList<BufferedOutputStream>();
// when a client connects
Socket connection = socket.accept();
connections[id] = connection;
// broadcasting to all clients
for (int i = 0; i < connections.size(); i++) {
try {
OutputStreamWriter osw = new OutputStreamWriter(connections.get(i), "US-ASCII");
osw.write(s + "\n");
osw.flush();
} catch (Exception g) {
// catch
}
}

注意:仅给出基本代码

问题:广播循环仅向循环中的第一个广播,有时也向其他循环广播。不会引发任何错误,循环迭代也将按其应有的方式进行。

出了什么问题以及如何修复它?这可能是显而易见的事情,但我仍然是初学者..

谢谢!

最佳答案

我们无法告诉您到底出了什么问题,因为您遗漏了代码的重要部分。但是,如果 connections[id] = connection 抛出 NPE,则意味着 connectionsnull 。而且,从表面上看,您似乎没有将 connections 初始化为非空值!

解决方法是在某处初始化连接...到适当大小的数组。然而,这会给你带来其他问题。数组的合适大小是多少,当 id 大于 connections.length 时您会做什么?

根本问题是数组(可能)是保存连接的糟糕选择......

关于Java 将 BufferedOutputStream 存储在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19501890/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com