我在使用 DatagramSockets 时遇到以下问题:
java.io.IOException: Operation is not permitted.
at java.net.PlainDatagramSocketImpl.send(Native Method)
at java.net.DatagramSocket.send(DatagramSocket.java:693)
Run Code Online (Sandbox Code Playgroud)
异常随机发生,我真的看不到模式。这让我更难调试它。
尽管如此,我怀疑当我发送大量数据时它会更频繁地发生。
我有多个线程通过这个套接字发送,但这应该不是问题,因为我读过 Java 套接字是线程安全的。
有人能告诉我什么时候以及在什么条件下可以抛出这样的异常吗?
这是我的基本网络代码:
package de.oompf.netwrk;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
class Server implements Runnable {
private final EventBus bus;
private final Thread serverThread;
private final DatagramSocket socket;
Server(EventBus bus) throws SocketException {
this.bus = bus;
serverThread = new Thread(this, "Server Thread");
socket = getBoundSocket();
socket.setSoTimeout(2400);
}
private static DatagramSocket getBoundSocket() throws SocketException {
for (int port : Configuration.getPortList()) {
try …Run Code Online (Sandbox Code Playgroud) 我是 Rust 的新手,我正在尝试想出一个简单的备份程序。第一步,文件被分解成可变长度的块(通过内容定义的分块)。
为此,我必须逐字节读取文件。不幸的是,我发现这个过程非常缓慢。随着dd我能够以高达350 MIB读取/秒。尽管如此,使用以下 Rust 代码我只能得到大约 45 MiB/s。(我省略了那里的所有分块内容。)
我正在阅读的文件大小约为 7.7 GiB。
// main.rs
use std::fs::File;
use std::io::BufReader;
use std::io::{Read, Bytes};
use std::time::{Instant, Duration};
fn main() {
let file = File::open("something_big.tar").expect("Cannot read file.");
let mut buf = BufReader::new(file);
let mut x = 0u8;
let mut num_bytes = 0usize;
let t1 = Instant::now();
for b in buf.bytes() {
match b {
Ok(b) => {
x += b;
num_bytes += 1;
// chunking stuff omitted
}, …Run Code Online (Sandbox Code Playgroud)