2024年最新【(12),2024年最新实践出真知

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

public override bool CanRead { get; }

示例

此代码示例是为 BufferedStream 类提供的一个更大示例的一部分。

if(bufStream.CanRead)
{
    ReceiveData(netStream, bufStream);
}

CanWrite 获取一个值,该值指示当前流是否支持写入
public override bool CanWrite { get; }

示例

此代码示例是为 BufferedStream 类提供的一个更大示例的一部分。

if(bufStream.CanWrite)
{
    SendData(netStream, bufStream);
}

Length 获取流长度,长度以字节为单位
public override long Length { get; }

♌ 常用方法
Close() 关闭当前流并释放与之关联的所有资源(如套接字和文件句柄)
public virtual void Close ();

注意:此方法调用 Dispose ,指定 true 以释放所有资源。 不需要专门调用 Close 方法。 请确保 Stream 已正确释放每个对象。 可以 Stream using Using 在 Visual Basic) 中 (或块中声明对象,以确保释放流及其所有资源,或者可以显式调用 Dispose 方法。

CopyTo(Stream) 从当前流中读取字节并将其写入到另一流中
public void CopyTo (System.IO.Stream destination);

参数

destination

Stream

当前流的内容将复制到的流。

示例

下面的示例将的内容复制 FileStreamMemoryStream 中。

// Create the streams.
MemoryStream destination = new MemoryStream();

using (FileStream source = File.Open(@"c:\temp\data.dat",
    FileMode.Open))
{

    Console.WriteLine("Source length: {0}", source.Length.ToString());

    // Copy source to destination.
    source.CopyTo(destination);
}

Console.WriteLine("Destination length: {0}", destination.Length.ToString());

CopyTo(Stream, Int32) 使用指定的缓冲区大小,从当前流中读取字节并将其写入到另一流中
public virtual void CopyTo (System.IO.Stream destination, int bufferSize);

参数

destination

Stream

当前流的内容将复制到的流。

bufferSize

Int

缓冲区的大小。 此值必须大于零。 默认大小为 81920。

CopyToAsync(Stream) 从当前流中异步读取字节并将其写入到另一个流中
public System.Threading.Tasks.Task CopyToAsync (System.IO.Stream destination);

参数

destination

Stream

当前流的内容将复制到的流。

示例

下面的示例演示如何使用两个 FileStream 对象将文件从一个目录异步复制到另一个目录。 FileStream 类是从 Stream 类派生的。 请注意, Click 控件的事件处理程序 Button 使用修饰符标记, async 因为它调用异步方法

using System;
using System.Threading.Tasks;
using System.Windows;
using System.IO;

namespace WpfApplication
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            string StartDirectory = @"c:\Users\exampleuser\start";
            string EndDirectory = @"c:\Users\exampleuser\end";

            foreach (string filename in Directory.EnumerateFiles(StartDirectory))
            {
                using (FileStream SourceStream = File.Open(filename, FileMode.Open))
                {
                    using (FileStream DestinationStream = File.Create(EndDirectory + filename.Substring(filename.LastIndexOf('\\'))))
                    {
                        await SourceStream.CopyToAsync(DestinationStream);
                    }
                }
            }
        }
    }
}

CopyToAsync方法使你可以在不阻塞主线程的情况下执行占用大量资源的 i/o 操作。

Dispose() 释放由 Stream 使用的所有资源
public void Dispose ();

Read(Byte[], Int32, Int32) 将字节从当前缓冲流复制到数组
public override int Read (byte[] buffer, int offset, int count);

参数

buffer

Byte[]

将字节复制到的缓冲区。

offset

Int32

缓冲区中的字节偏移量,从此处开始读取字节。

count

Int32

要读取的字节数。

返回

Int32

读入 array 中的总字节数。 如果可用的字节没有所请求的那么多,总字节数可能小于请求的字节数;或者如果在可读取任何数据前就已到达流的末尾,则为零。

示例

此代码示例是为 BufferedStream 类提供的一个更大示例的一部分。

// Receive data using the BufferedStream.
Console.WriteLine("Receiving data using BufferedStream.");
bytesReceived = 0;
startTime = DateTime.Now;

int numBytesToRead = receivedData.Length;

while (numBytesToRead > 0)
{
    // Read may return anything from 0 to numBytesToRead.
    int n = bufStream.Read(receivedData,0, receivedData.Length);
    // The end of the file is reached.
    if (n == 0)
        break;
    bytesReceived += n;
    numBytesToRead -= n;
}

bufferedTime = (DateTime.Now - startTime).TotalSeconds;
Console.WriteLine("{0} bytes received in {1} seconds.\n",
    bytesReceived.ToString(),
    bufferedTime.ToString("F1"));

Read仅当到达流的末尾时,该方法才会返回 0。 在所有其他情况下, Read 始终在返回之前从流中读取至少一个字节。 根据定义,如果在调用 Read时流中没有可用数据,该方法 Read 将返回 0 (到达流的末尾会自动) 。 即使尚未到达流的末尾,实现也可以返回比请求的字节少。

用于 BinaryReader 读取基元数据类型。

ReadAsync(Byte[], Int32, Int32) 从当前流异步读取字节序列,并将流中的位置提升读取的字节数
public System.Threading.Tasks.Task<int> ReadAsync (byte[] buffer, int offset, int count);

参数

buffer

Byte[]

要写入数据的缓冲区。

offset

Int32

buffer 中的字节偏移量,从该偏移量开始写入从流中读取的数据。

count

Int32

最多读取的字节数。

返回

Task<Int32>

表示异步读取操作的任务。 TResult 参数的值包含读入缓冲区的总字节数。 如果当前可用字节数少于所请求的字节数,则该结果值可小于所请求的字节数;如果已到达流结尾时,则为 0(零)。

示例

下面的示例演示如何以异步方式从文件读取。 该示例使用 FileStream 类,该类派生自 Stream 类。

using System;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.IO;

namespace WpfApplication1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            string filename = @"c:\Temp\userinputlog.txt";
            byte[] result;

            using (FileStream SourceStream = File.Open(filename, FileMode.Open))
            {
                result = new byte[SourceStream.Length];
                await SourceStream.ReadAsync(result, 0, (int)SourceStream.Length);
            }

            UserInput.Text = System.Text.Encoding.ASCII.GetString(result);
        }
    }
}

ReadByte() 从基础流中读取一个字节,并返回转换为 int 的该字节;或者如果从流的末尾读取则返回 -1
public override int ReadByte ();

返回

Int32

强制转换为 Int32 的字节;或者如果已到达流的末尾,则为 -1。

Write(Byte[], Int32, Int32) 将字节复制到缓冲流,并将缓冲流内的当前位置前进写入的字节数
public override void Write (byte[] buffer, int offset, int count);

参数

buffer

Byte[]

字节数组,从该字节数组将 count 个字节复制到当前缓冲流中。

offset

Int32

缓冲区中的偏移量,从此处开始将字节复制到当前缓冲流中。

count

Int32

要写入当前缓冲流中的字节数。

示例

此代码示例是为 BufferedStream 类提供的一个更大示例的一部分。

// Send the data using the BufferedStream.
Console.WriteLine("Sending data using BufferedStream.");
startTime = DateTime.Now;
for(int i = 0; i < numberOfLoops; i++)
{
    bufStream.Write(dataToSend, 0, dataToSend.Length);
}
bufStream.Flush();
bufferedTime = (DateTime.Now - startTime).TotalSeconds;
Console.WriteLine("{0} bytes sent in {1} seconds.\n",
    numberOfLoops * dataToSend.Length,
    bufferedTime.ToString("F1"));

WriteAsync(Byte[], Int32, Int32) 将字节序列异步写入当前流,并将流的当前位置提升写入的字节数
public System.Threading.Tasks.Task WriteAsync (byte[] buffer, int offset, int count);

参数

buffer

Byte[]

从中写入数据的缓冲区。

offset

Int32

buffer 中的从零开始的字节偏移量,从此处开始将字节复制到该流。

count

Int32

最多写入的字节数。

返回

Task

表示异步写入操作的任务。

示例

下面的示例演示如何异步写入文件。 该示例使用 FileStream 类,该类派生自 Stream 类。

using System;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.IO;

namespace WpfApplication1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            UnicodeEncoding uniencoding = new UnicodeEncoding();
            string filename = @"c:\Users\exampleuser\Documents\userinputlog.txt";

            byte[] result = uniencoding.GetBytes(UserInput.Text);

            using (FileStream SourceStream = File.Open(filename, FileMode.OpenOrCreate))
            {
                SourceStream.Seek(0, SeekOrigin.End);
                await SourceStream.WriteAsync(result, 0, result.Length);
            }
        }
    }
}

WriteByte(Byte) 一个字节写入文件流中的当前位置
public override void WriteByte (byte value);

参数

value

Byte

要写入流的字节。

Flush() 清除此流的缓冲区,使得所有缓冲数据都写入到文件中
public override void Flush ();

示例

此代码示例是为 BufferedStream 类提供的一个更大示例的一部分。

// Send the data using the BufferedStream.
Console.WriteLine("Sending data using BufferedStream.");
startTime = DateTime.Now;
for(int i = 0; i < numberOfLoops; i++)
{
    bufStream.Write(dataToSend, 0, dataToSend.Length);
}
bufStream.Flush();
bufferedTime = (DateTime.Now - startTime).TotalSeconds;
Console.WriteLine("{0} bytes sent in {1} seconds.\n",
    numberOfLoops * dataToSend.Length,
    bufferedTime.ToString("F1"));

除非显式调用或Close调用Flush流,否则刷新流不会刷新其基础编码器。

如果使用 BufferedStream 构造函数,因此在创建 BufferedStream 对象时指定缓冲区大小,则在内容达到缓冲区大小时会刷新。 例如,当缓冲区大小达到 5 字节时,例如 BufferedStream bs = new BufferedStream(bs, 5) 将刷新内容的代码。

自动维护缓冲区的所有读取和写入方法 BufferedStream ,因此在读取和写入之间来回切换时无需调用 Flush

FlushAsync() 异步清除此流的所有缓冲区并导致所有缓冲数据都写入基础设备中
public System.Threading.Tasks.Task FlushAsync ();

返回

Task

表示异步刷新操作的任务。

♍ 注解

缓冲区是内存中用于缓存数据的字节块,从而减少对操作系统的调用数。 缓冲区可提高读取和写入性能。 缓冲区可用于读取或写入,但不能同时两者。

BufferedStream 可以围绕某些类型的流组成。 它提供用于读取和写入基础数据源或存储库的字节的实现。 使用 BinaryReaderBinaryWriter 写入其他数据类型。 BufferedStream 旨在防止缓冲区在不需要缓冲区时减慢输入和输出速度。 如果始终读取和写入大于内部缓冲区大小的大小,则 BufferedStream 甚至可能不会分配内部缓冲区。 BufferedStream 此外,缓冲区在共享缓冲区中读取和写入。 假设你几乎总是执行一系列读取或写入操作,但很少在两个读取或写入之间交替。

♎ 更多方法

更多方法请查阅官方文档BufferedStream类


⭐写在结尾:

文章中出现的任何错误请大家批评指出,一定及时修改。

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

topics/618545628) 和 BinaryWriter 写入其他数据类型。 BufferedStream 旨在防止缓冲区在不需要缓冲区时减慢输入和输出速度。 如果始终读取和写入大于内部缓冲区大小的大小,则 BufferedStream 甚至可能不会分配内部缓冲区。 BufferedStream 此外,缓冲区在共享缓冲区中读取和写入。 假设你几乎总是执行一系列读取或写入操作,但很少在两个读取或写入之间交替。

♎ 更多方法

更多方法请查阅官方文档BufferedStream类


⭐写在结尾:

文章中出现的任何错误请大家批评指出,一定及时修改。

[外链图片转存中…(img-TKAA2IOZ-1715652966051)]
[外链图片转存中…(img-yoHYoRiL-1715652966051)]
[外链图片转存中…(img-hT6ZJfFk-1715652966052)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值