相关疑难解决方法(0)

每个客户一个线程.可行?

我正在编写一个Java服务器,它使用普通套接字来接受来自客户端的连接.我正在使用相当简单的模型,其中每个连接在阻塞模式下都有自己的线程读取.伪代码:

handshake();

while(!closed) {
  length = readHeader(); // this usually blocks a few seconds
  readMessage(length);
}

cleanup();
Run Code Online (Sandbox Code Playgroud)

(线程是从一个创建的,Executors.newCachedThreadPool()所以启动它们不应该有任何重大的开销)

我知道这是一个天真的设置,如果线程是专用的OS线程,它不会很好地扩展到许多连接.但是,我听说Java中的多个线程可以共享一个硬件线程.真的吗?

知道我将在Linux上使用Hotspot VM,在具有8核和12GB RAM的服务器上,您认为这种设置适用于数千个连接吗?如果没有,有哪些替代方案?

java io networking multithreading nio

19
推荐指数
2
解决办法
4198
查看次数

java读/写构造

有人可以解释为什么这个结构不起作用:

while (fileInputStream.available()>0) {    
    fileOutputStream.write(fileInputStream.read());
}
Run Code Online (Sandbox Code Playgroud)

这个工作得很好:

while (fileInputStream.available()>0) {
    int data = fileInputStream.read();
    fileOutputStream.write(data);
}
Run Code Online (Sandbox Code Playgroud)

至于我,他们是相同的,但第一个不会正确写入数据(将写入一半的文件长度/数据).

java io fileinputstream fileoutputstream

6
推荐指数
1
解决办法
129
查看次数

从 Android USB 配件读取数据的更好方法

我正在用 Java 编写一个 Android 应用程序,该应用程序使用 Android 配件 API 与 USB 配件进行通信。

谷歌文档并没有给出实际读取和写入数据,只是如何打开附件进行通信的例子。

它还说明了两件事:

  1. 通信应该在后台线程中完成,而不是在 UI 线程上。
  2. 读取缓冲区的长度应至少为 16384 字节,因为这是 Android Open Accessory 协议的最大消息长度。

我实现了这样的阅读:

/** boiler plate from example docs: **/
fileDescriptor = usbManager.openAccessory(accessory);

if (fileDescriptor != null) {
    FileDescriptor fd = fileDescriptor.getFileDescriptor();
    inputStream = new FileInputStream(fd);
    readBuffer = new byte[16384];
    // ... some more code that is not relevant for reading data ... //
}

/** my code in separate thread: **/

int read;

while ((read = …
Run Code Online (Sandbox Code Playgroud)

java usb android accessory

5
推荐指数
0
解决办法
427
查看次数

如何判断Java SSLSocket是否有可用数据?

当我使用常规套接字时,我可以调用 getInputStream() 并使用 available() 来查看有多少字节可用。我切换到 SSLSocket,但由于某种原因,现在 available() 总是返回 0。当我阅读时,我仍然可以获得数据。如何判断 SSLSocket 中是否有可用数据,以便在没有数据时可以不阻塞地为其提供服务?

笔记:

  • 我无法在 InputStream 上调用 read() ,否则线程将阻塞。我希望在我的实现中实现非阻塞。
  • 即使 SSLSocket 的输入流有数据,available() 也会返回 0。

java sockets ssl

2
推荐指数
1
解决办法
2603
查看次数