You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core C#中InputStream/OutputStream等价实现及线程组织方案

.NET Core C# 中 Java InputStream/OutputStream 的等价实现及线程组织

Java InputStream/OutputStream 的 C# 等价实现

在Java中,InputStream和OutputStream是字节流读写的抽象基类,对应到.NET Core C#中,核心等价抽象类是**Stream**。

针对你给出的Socket场景:
Java代码示例:

Socket socket = new Socket(host, port);
OutputStream out = socket.getOutputStream();
InputStream input = socket.getInputStream();

C#里TcpClient.GetStream()返回的**NetworkStream**是双向流,同时支持读、写操作,无需分别获取输入、输出流(你的思路里重复获取两次是多余的),正确写法如下:

var client = new TcpClient(host, port);
NetworkStream stream = client.GetStream();
// 同一个stream既可以执行写操作(对应Java的OutputStream),也可以执行读操作(对应Java的InputStream)

通用字节流场景的对应关系:

  • 对应InputStream:所有继承自Stream的可读流,比如FileStream(文件读)、MemoryStream(内存读)等
  • 对应OutputStream:所有继承自Stream的可写流,上述FileStream、MemoryStream等同样支持写操作

类似Java的线程组织方式

Java中通常会启动独立线程分别处理读、写逻辑,C#中可以用Thread类模拟传统线程写法,也可以用更符合.NET生态的异步任务(Task)实现。

用Thread类模拟Java线程写法

var client = new TcpClient(host, port);
var stream = client.GetStream();

// 读线程
var readThread = new Thread(() => {
    byte[] buffer = new byte[1024];
    int bytesRead;
    try {
        while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0) {
            // 处理读取到的字节数据
            Console.WriteLine($"读取到 {bytesRead} 字节");
        }
    }
    catch (IOException ex) {
        // 处理连接断开等异常
        Console.WriteLine("读操作异常:" + ex.Message);
    }
});

// 写线程
var writeThread = new Thread(() => {
    byte[] data = System.Text.Encoding.UTF8.GetBytes("Hello from C#");
    try {
        stream.Write(data, 0, data.Length);
        // 如需持续写数据,可在此添加循环逻辑
    }
    catch (IOException ex) {
        Console.WriteLine("写操作异常:" + ex.Message);
    }
});

// 启动线程
readThread.Start();
writeThread.Start();

推荐的异步写法(Task/async-await)

.NET Core更推荐异步编程模型,避免阻塞线程,写法如下:

var client = new TcpClient(host, port);
var stream = client.GetStream();

// 异步读任务
async Task ReadFromStreamAsync() {
    byte[] buffer = new byte[1024];
    int bytesRead;
    try {
        while ((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length)) > 0) {
            // 处理读取的数据
            Console.WriteLine($"读取到 {bytesRead} 字节");
        }
    }
    catch (IOException ex) {
        Console.WriteLine("读操作异常:" + ex.Message);
    }
}

// 异步写任务
async Task WriteToStreamAsync() {
    byte[] data = System.Text.Encoding.UTF8.GetBytes("Hello from C# async");
    try {
        await stream.WriteAsync(data, 0, data.Length);
        // 如需持续写数据,可在此添加循环逻辑
    }
    catch (IOException ex) {
        Console.WriteLine("写操作异常:" + ex.Message);
    }
}

// 启动异步任务
_ = ReadFromStreamAsync();
_ = WriteToStreamAsync();

内容的提问来源于stack exchange,提问作者Dmitry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 08:35:17