BufferedStream Klas

Definitie

Voegt een bufferlaag toe om lees- en schrijfbewerkingen in een andere stream te lezen en te schrijven. Deze klasse kan niet worden overgenomen.

public ref class BufferedStream sealed : System::IO::Stream
public sealed class BufferedStream : System.IO.Stream
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class BufferedStream : System.IO.Stream
type BufferedStream = class
    inherit Stream
[<System.Runtime.InteropServices.ComVisible(true)>]
type BufferedStream = class
    inherit Stream
Public NotInheritable Class BufferedStream
Inherits Stream
Overname
BufferedStream
Overname
Kenmerken

Voorbeelden

In de volgende codevoorbeelden ziet u hoe u de BufferedStream klasse gebruikt voor de NetworkStream klasse om de prestaties van bepaalde I/O-bewerkingen te verbeteren. Start de server op een externe computer voordat u de client start. Geef de naam van de externe computer op als een opdrachtregelargument bij het starten van de client. Variëren de dataArraySize en streamBufferSize constanten om hun effect op prestaties te bekijken.

In het eerste voorbeeld ziet u de code die op de client wordt uitgevoerd en in het tweede voorbeeld wordt de code weergegeven die op de server wordt uitgevoerd.

Voorbeeld 1: Code die wordt uitgevoerd op de client

using System;
using System.IO;
using System.Globalization;
using System.Net;
using System.Net.Sockets;

public class Client
{
    const int dataArraySize    =   100;
    const int streamBufferSize =  1000;
    const int numberOfLoops    = 10000;

    static void Main(string[] args)
    {
        // Check that an argument was specified when the
        // program was invoked.
        if(args.Length == 0)
        {
            Console.WriteLine("Error: The name of the host computer" +
                " must be specified when the program is invoked.");
            return;
        }

        string remoteName = args[0];

        // Create the underlying socket and connect to the server.
        Socket clientSocket = new Socket(AddressFamily.InterNetwork,
            SocketType.Stream, ProtocolType.Tcp);

        clientSocket.Connect(new IPEndPoint(
            Dns.Resolve(remoteName).AddressList[0], 1800));

        Console.WriteLine("Client is connected.\n");

        // Create a NetworkStream that owns clientSocket and
        // then create a BufferedStream on top of the NetworkStream.
        // Both streams are disposed when execution exits the
        // using statement.
        using(Stream
            netStream = new NetworkStream(clientSocket, true),
            bufStream =
                  new BufferedStream(netStream, streamBufferSize))
        {
            // Check whether the underlying stream supports seeking.
            Console.WriteLine("NetworkStream {0} seeking.\n",
                bufStream.CanSeek ? "supports" : "does not support");

            // Send and receive data.
            if(bufStream.CanWrite)
            {
                SendData(netStream, bufStream);
            }
            if(bufStream.CanRead)
            {
                ReceiveData(netStream, bufStream);
            }

            // When bufStream is closed, netStream is in turn
            // closed, which in turn shuts down the connection
            // and closes clientSocket.
            Console.WriteLine("\nShutting down the connection.");
            bufStream.Close();
        }
    }

    static void SendData(Stream netStream, Stream bufStream)
    {
        DateTime startTime;
        double networkTime, bufferedTime;

        // Create random data to send to the server.
        byte[] dataToSend = new byte[dataArraySize];
        new Random().NextBytes(dataToSend);

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

        // 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"));

        // Print the ratio of write times.
        Console.WriteLine("Sending data using the buffered " +
            "network stream was {0} {1} than using the network " +
            "stream alone.\n",
            (networkTime/bufferedTime).ToString("P0"),
            bufferedTime < networkTime ? "faster" : "slower");
    }

    static void ReceiveData(Stream netStream, Stream bufStream)
    {
        DateTime startTime;
        double networkTime, bufferedTime = 0;
        int bytesReceived = 0;
        byte[] receivedData = new byte[dataArraySize];

        // Receive data using the NetworkStream.
        Console.WriteLine("Receiving data using NetworkStream.");
        startTime = DateTime.Now;
        while(bytesReceived < numberOfLoops * receivedData.Length)
        {
            bytesReceived += netStream.Read(
                receivedData, 0, receivedData.Length);
        }
        networkTime = (DateTime.Now - startTime).TotalSeconds;
        Console.WriteLine("{0} bytes received in {1} seconds.\n",
            bytesReceived.ToString(),
            networkTime.ToString("F1"));

        // 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"));

        // Print the ratio of read times.
        Console.WriteLine("Receiving data using the buffered network" +
            " stream was {0} {1} than using the network stream alone.",
            (networkTime/bufferedTime).ToString("P0"),
            bufferedTime < networkTime ? "faster" : "slower");
    }
}
module Client

open System
open System.IO
open System.Net
open System.Net.Sockets

let dataArraySize    =   100
let streamBufferSize =  1000
let numberOfLoops    = 10000

let sendData (netStream: Stream) (bufStream: Stream) =
    // Create random data to send to the server.
    let dataToSend = Array.zeroCreate dataArraySize
    Random().NextBytes dataToSend

    // Send the data using the NetworkStream.
    printfn "Sending data using NetworkStream."
    let startTime = DateTime.Now
    for _ = 0 to numberOfLoops - 1 do
        netStream.Write(dataToSend, 0, dataToSend.Length)
    let networkTime = (DateTime.Now - startTime).TotalSeconds
    printfn $"{numberOfLoops * dataToSend.Length} bytes sent in {networkTime:F1} seconds.\n"

    // Send the data using the BufferedStream.
    printfn "Sending data using BufferedStream."
    let startTime = DateTime.Now
    for _ = 0 to numberOfLoops - 1 do
        bufStream.Write(dataToSend, 0, dataToSend.Length)
    bufStream.Flush()
    let bufferedTime = (DateTime.Now - startTime).TotalSeconds
    printfn $"{numberOfLoops * dataToSend.Length} bytes sent in {bufferedTime:F1} seconds.\n"

    // Print the ratio of write times.
    printfn $"""Sending data using the buffered network stream was {networkTime / bufferedTime:P0} {if bufferedTime < networkTime then "faster" else "slower"} than using the network stream alone."""
    printfn ""

let receiveData (netStream: Stream) (bufStream: Stream) =
    let mutable bytesReceived = 0
    let receivedData = Array.zeroCreate dataArraySize

    // Receive data using the NetworkStream.
    printfn "Receiving data using NetworkStream."
    let startTime = DateTime.Now
    while bytesReceived < numberOfLoops * receivedData.Length do
        bytesReceived <- bytesReceived + netStream.Read(receivedData, 0, receivedData.Length)
    let networkTime = (DateTime.Now - startTime).TotalSeconds
    printfn $"{bytesReceived} bytes received in {networkTime:F1} seconds.\n"

    // Receive data using the BufferedStream.
    printfn "Receiving data using BufferedStream."
    bytesReceived <- 0
    let startTime = DateTime.Now

    let mutable numBytesToRead = receivedData.Length

    let mutable broken = false
    while not broken && numBytesToRead > 0 do
        // Read may return anything from 0 to numBytesToRead.
        let n = bufStream.Read(receivedData,0, receivedData.Length)
        // The end of the file is reached.
        if n = 0 then
            broken <- true
        else
            bytesReceived <- bytesReceived + n
            numBytesToRead <- numBytesToRead - n

    let bufferedTime = (DateTime.Now - startTime).TotalSeconds
    printfn $"{bytesReceived} bytes received in {bufferedTime:F1} seconds.\n"

    // Print the ratio of read times.
    printfn $"""Receiving data using the buffered network stream was {networkTime / bufferedTime:P0} {if bufferedTime < networkTime then "faster" else "slower"} than using the network stream alone."""

[<EntryPoint>]
let main args =
    // Check that an argument was specified when the
    // program was invoked.
    if args.Length = 0 then
        printfn "Error: The name of the host computer must be specified when the program is invoked."
    else
        let remoteName = args[0]

        // Create the underlying socket and connect to the server.
        let clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

        clientSocket.Connect(IPEndPoint(Dns.GetHostEntry(remoteName).AddressList[0], 1800))

        printfn "Client is connected.\n"

        // Create a NetworkStream that owns clientSocket and
        // then create a BufferedStream on top of the NetworkStream.
        // Both streams are disposed when execution exits the
        // using statement.
        use netStream = new NetworkStream(clientSocket, true)
        use bufStream = new BufferedStream(netStream, streamBufferSize)
        // Check whether the underlying stream supports seeking.
        printfn $"""NetworkStream {if bufStream.CanSeek then "supports" else "does not support"} seeking.\n"""

        // Send and receive data.
        if bufStream.CanWrite then
            sendData netStream bufStream
        if bufStream.CanRead then
            receiveData netStream bufStream

        // When bufStream is closed, netStream is in turn
        // closed, which in turn shuts down the connection
        // and closes clientSocket.
        printfn "\nShutting down the connection."
        bufStream.Close()
    0
' Compile using /r:System.dll.
Imports System.IO
Imports System.Globalization
Imports System.Net
Imports System.Net.Sockets

Public Class Client 

    Const dataArraySize As Integer    =   100
    Const streamBufferSize As Integer =  1000
    Const numberOfLoops As Integer    = 10000

    Shared Sub Main(args As String()) 
    
        ' Check that an argument was specified when the 
        ' program was invoked.
        If args.Length = 0 Then
            Console.WriteLine("Error: The name of the host " & _
                "computer must be specified when the program " & _ 
                "is invoked.")
            Return
        End If

        Dim remoteName As String = args(0)

        ' Create the underlying socket and connect to the server.
        Dim clientSocket As New Socket(AddressFamily.InterNetwork, _
            SocketType.Stream, ProtocolType.Tcp)

        clientSocket.Connect(New IPEndPoint( _
            Dns.Resolve(remoteName).AddressList(0), 1800))

        Console.WriteLine("Client is connected." & vbCrLf)

        ' Create a NetworkStream that owns clientSocket and then 
        ' create a BufferedStream on top of the NetworkStream.
        Dim netStream As New NetworkStream(clientSocket, True)
        Dim bufStream As New _
            BufferedStream(netStream, streamBufferSize)
        
        Try
            ' Check whether the underlying stream supports seeking.
            If bufStream.CanSeek Then
                Console.WriteLine("NetworkStream supports" & _
                    "seeking." & vbCrLf)
            Else
                Console.WriteLine("NetworkStream does not " & _
                    "support seeking." & vbCrLf)
            End If

            ' Send and receive data.
            If bufStream.CanWrite Then
                SendData(netStream, bufStream)
            End If            
            If bufStream.CanRead Then
                ReceiveData(netStream, bufStream)
            End If
        Finally

            ' When bufStream is closed, netStream is in turn 
            ' closed, which in turn shuts down the connection 
            ' and closes clientSocket.
            Console.WriteLine(vbCrLf & "Shutting down the connection.")
            bufStream.Close()
        End Try
    End Sub

    Shared Sub SendData(netStream As Stream, bufStream As Stream)
    
        Dim startTime As DateTime 
        Dim networkTime As Double, bufferedTime As Double 

        ' Create random data to send to the server.
        Dim dataToSend(dataArraySize - 1) As Byte
        Dim randomGenerator As New Random()
        randomGenerator.NextBytes(dataToSend)

        ' Send the data using the NetworkStream.
        Console.WriteLine("Sending data using NetworkStream.")
        startTime = DateTime.Now
        For i As Integer = 1 To numberOfLoops
            netStream.Write(dataToSend, 0, dataToSend.Length)
        Next i
        networkTime = DateTime.Now.Subtract(startTime).TotalSeconds
        Console.WriteLine("{0} bytes sent in {1} seconds." & vbCrLf, _
            numberOfLoops * dataToSend.Length, _
            networkTime.ToString("F1"))

        ' Send the data using the BufferedStream.
        Console.WriteLine("Sending data using BufferedStream.")
        startTime = DateTime.Now
        For i As Integer = 1 To numberOfLoops
            bufStream.Write(dataToSend, 0, dataToSend.Length)
        Next i
        
        bufStream.Flush()
        bufferedTime = DateTime.Now.Subtract(startTime).TotalSeconds
        Console.WriteLine("{0} bytes sent In {1} seconds." & vbCrLf, _
            numberOfLoops * dataToSend.Length, _
            bufferedTime.ToString("F1"))

        ' Print the ratio of write times.
        Console.Write("Sending data using the buffered " & _
            "network stream was {0}", _
            (networkTime/bufferedTime).ToString("P0"))
        If bufferedTime < networkTime Then
            Console.Write(" faster")
        Else
            Console.Write(" slower")
        End If
        Console.WriteLine(" than using the network stream alone.")
    End Sub

    Shared Sub ReceiveData(netStream As Stream, bufStream As Stream)
    
        Dim startTime As DateTime 
        Dim networkTime As Double, bufferedTime As Double = 0

        Dim bytesReceived As Integer = 0
        Dim receivedData(dataArraySize - 1) As Byte

        ' Receive data using the NetworkStream.
        Console.WriteLine("Receiving data using NetworkStream.")
        startTime = DateTime.Now
        While bytesReceived < numberOfLoops * receivedData.Length
            bytesReceived += netStream.Read( _
                receivedData, 0, receivedData.Length)
        End While
        networkTime = DateTime.Now.Subtract(startTime).TotalSeconds
        Console.WriteLine("{0} bytes received in {1} " & _
            "seconds." & vbCrLf, _
            bytesReceived.ToString(), _
            networkTime.ToString("F1"))

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

        Dim numBytesToRead As Integer = receivedData.Length
        Dim n As Integer
        Do While numBytesToRead > 0

            'Read my return anything from 0 to numBytesToRead
            n = bufStream.Read(receivedData, 0, receivedData.Length)
            'The end of the file is reached.
            If n = 0 Then
                Exit Do
            End If

            bytesReceived += n
            numBytesToRead -= n
        Loop

        bufferedTime = DateTime.Now.Subtract(startTime).TotalSeconds
        Console.WriteLine("{0} bytes received in {1} " & _
            "seconds." & vbCrLf, _
            bytesReceived.ToString(), _
            bufferedTime.ToString("F1"))

        ' Print the ratio of read times.
        Console.Write("Receiving data using the buffered " & _
            "network stream was {0}", _
            (networkTime/bufferedTime).ToString("P0"))
        If bufferedTime < networkTime Then
            Console.Write(" faster")
        Else
            Console.Write(" slower")
        End If
        Console.WriteLine(" than using the network stream alone.")
    End Sub
End Class

Voorbeeld 2: Code die wordt uitgevoerd op de server

using System;
using System.Net;
using System.Net.Sockets;

public class Server
{
    static void Main()
    {
        // This is a Windows Sockets 2 error code.
        const int WSAETIMEDOUT = 10060;

        Socket serverSocket;
        int bytesReceived, totalReceived = 0;
        byte[] receivedData = new byte[2000000];

        // Create random data to send to the client.
        byte[] dataToSend = new byte[2000000];
        new Random().NextBytes(dataToSend);

        IPAddress ipAddress =
            Dns.Resolve(Dns.GetHostName()).AddressList[0];

        IPEndPoint ipEndpoint = new IPEndPoint(ipAddress, 1800);

        // Create a socket and listen for incoming connections.
        using(Socket listenSocket = new Socket(
            AddressFamily.InterNetwork, SocketType.Stream,
            ProtocolType.Tcp))
        {
            listenSocket.Bind(ipEndpoint);
            listenSocket.Listen(1);

            // Accept a connection and create a socket to handle it.
            serverSocket = listenSocket.Accept();
            Console.WriteLine("Server is connected.\n");
        }

        try
        {
            // Send data to the client.
            Console.Write("Sending data ... ");
            int bytesSent = serverSocket.Send(
                dataToSend, 0, dataToSend.Length, SocketFlags.None);
            Console.WriteLine("{0} bytes sent.\n",
                bytesSent.ToString());

            // Set the timeout for receiving data to 2 seconds.
            serverSocket.SetSocketOption(SocketOptionLevel.Socket,
                SocketOptionName.ReceiveTimeout, 2000);

            // Receive data from the client.
            Console.Write("Receiving data ... ");
            try
            {
                do
                {
                    bytesReceived = serverSocket.Receive(receivedData,
                        0, receivedData.Length, SocketFlags.None);
                    totalReceived += bytesReceived;
                }
                while(bytesReceived != 0);
            }
            catch(SocketException e)
            {
                if(e.ErrorCode == WSAETIMEDOUT)
                {
                    // Data was not received within the given time.
                    // Assume that the transmission has ended.
                }
                else
                {
                    Console.WriteLine("{0}: {1}\n",
                        e.GetType().Name, e.Message);
                }
            }
            finally
            {
                Console.WriteLine("{0} bytes received.\n",
                    totalReceived.ToString());
            }
        }
        finally
        {
            serverSocket.Shutdown(SocketShutdown.Both);
            Console.WriteLine("Connection shut down.");
            serverSocket.Close();
        }
    }
}
module Server

open System
open System.Net
open System.Net.Sockets

// This is a Windows Sockets 2 error code.
let WSAETIMEDOUT = 10060

let mutable bytesReceived = -1 
let mutable totalReceived = 0
let receivedData = Array.zeroCreate 2000000

// Create random data to send to the client.
let dataToSend = Array.zeroCreate 2000000
Random().NextBytes dataToSend

let ipAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0]

let ipEndpoint = IPEndPoint(ipAddress, 1800)

// Create a socket and listen for incoming connections.
let serverSocket = 
    use listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    listenSocket.Bind ipEndpoint
    listenSocket.Listen 1

    // Accept a connection and create a socket to handle it.
    listenSocket.Accept()

printfn "Server is connected.\n"

try
    // Send data to the client.
    printf "Sending data ... "
    let bytesSent = serverSocket.Send(dataToSend, 0, dataToSend.Length, SocketFlags.None)
    printfn $"{bytesSent} bytes sent.\n"

    // Set the timeout for receiving data to 2 seconds.
    serverSocket.SetSocketOption(SocketOptionLevel.Socket,
        SocketOptionName.ReceiveTimeout, 2000)

    // Receive data from the client.
    printf "Receiving data ... "
    try
        try
            while bytesReceived <> 0 do
                bytesReceived <- serverSocket.Receive(receivedData, 0, receivedData.Length, SocketFlags.None)
                totalReceived <- totalReceived + bytesReceived

        with :? SocketException as e ->
            if e.ErrorCode = WSAETIMEDOUT then
                // Data was not received within the given time.
                // Assume that the transmission has ended.
                ()
            else
                printfn $"{e.GetType().Name}: {e.Message}\n"
    finally
        printfn $"{totalReceived} bytes received.\n"
finally
    serverSocket.Shutdown SocketShutdown.Both
    printfn "Connection shut down."
    serverSocket.Close()
' Compile using /r:System.dll.
Imports System.Net
Imports System.Net.Sockets

Public Class Server 

    Shared Sub Main() 
    
        ' This is a Windows Sockets 2 error code.
        Const WSAETIMEDOUT As Integer = 10060

        Dim serverSocket As Socket 
        Dim bytesReceived As Integer
        Dim totalReceived As Integer = 0
        Dim receivedData(2000000-1) As Byte

        ' Create random data to send to the client.
        Dim dataToSend(2000000-1) As Byte
        Dim randomGenerator As New Random()
        randomGenerator.NextBytes(dataToSend)

        Dim ipAddress As IPAddress = _
            Dns.Resolve(Dns.GetHostName()).AddressList(0)

        Dim ipEndpoint As New IPEndPoint(ipAddress, 1800)

        ' Create a socket and listen for incoming connections.
        Dim listenSocket As New Socket(AddressFamily.InterNetwork, _
            SocketType.Stream, ProtocolType.Tcp)
        
        Try
            listenSocket.Bind(ipEndpoint)
            listenSocket.Listen(1)

            ' Accept a connection and create a socket to handle it.
            serverSocket = listenSocket.Accept()
            Console.WriteLine("Server is connected." & vbCrLf)
        Finally
            listenSocket.Close()
        End Try

        Try
            ' Send data to the client.
            Console.Write("Sending data ... ")
            Dim bytesSent As Integer = serverSocket.Send( _
                dataToSend, 0, dataToSend.Length, SocketFlags.None)
            Console.WriteLine("{0} bytes sent." & vbCrLf, _
                bytesSent.ToString())

            ' Set the timeout for receiving data to 2 seconds.
            serverSocket.SetSocketOption(SocketOptionLevel.Socket, _
                SocketOptionName.ReceiveTimeout, 2000)

            ' Receive data from the client.
            Console.Write("Receiving data ... ")
            Try
                Do
                    bytesReceived = serverSocket.Receive( _
                        receivedData, 0, receivedData.Length, _
                        SocketFlags.None)
                    totalReceived += bytesReceived
                Loop While bytesReceived <> 0
            Catch e As SocketException
                If(e.ErrorCode = WSAETIMEDOUT)
                
                    ' Data was not received within the given time.
                    ' Assume that the transmission has ended.
                Else
                    Console.WriteLine("{0}: {1}" & vbCrLf, _
                        e.GetType().Name, e.Message)
                End If
            Finally
                Console.WriteLine("{0} bytes received." & vbCrLf, _
                    totalReceived.ToString())
            End Try
        Finally
            serverSocket.Shutdown(SocketShutdown.Both)
            Console.WriteLine("Connection shut down.")
            serverSocket.Close()
        End Try
    
    End Sub
End Class

Opmerkingen

Een buffer is een blok bytes in het geheugen dat wordt gebruikt om gegevens in de cache op te slaan, waardoor het aantal aanroepen naar het besturingssysteem wordt verminderd. Buffers verbeteren de lees- en schrijfprestaties. Een buffer kan worden gebruikt voor lezen of schrijven, maar nooit tegelijkertijd. De Read en Write methoden voor het automatisch onderhouden van BufferedStream de buffer.

Important

Met dit type wordt de IDisposable interface geïmplementeerd. Wanneer u klaar bent met het gebruik van het type, moet u het direct of indirect verwijderen. Als u het type rechtstreeks wilt verwijderen, roept u de Dispose methode aan in een try/catch blok. Als u deze indirect wilt verwijderen, gebruikt u een taalconstructie zoals using (in C#) of Using (in Visual Basic). Zie de sectie 'Using an Object that Implements IDisposable' (Een object gebruiken dat IDisposable implementeert) in het IDisposable interfaceonderwerp voor meer informatie.

BufferedStream kan worden samengesteld rond bepaalde typen streams. Het biedt implementaties voor het lezen en schrijven van bytes naar een onderliggende gegevensbron of opslagplaats. Gebruik BinaryReader en BinaryWriter voor het lezen en schrijven van andere gegevenstypen. BufferedStream is ontworpen om te voorkomen dat de buffer invoer en uitvoer vertraagt wanneer de buffer niet nodig is. Als u altijd lees- en schrijfbewerkingen voor grotere grootten dan de interne buffergrootte, wijst u BufferedStream mogelijk niet eens de interne buffer toe. BufferedStream buffert ook lees- en schrijfbewerkingen in een gedeelde buffer. Er wordt van uitgegaan dat u bijna altijd een reeks lees- of schrijfbewerkingen gaat uitvoeren, maar zelden tussen de twee leesbewerkingen of schrijfbewerkingen.

Constructors

Name Description
BufferedStream(Stream, Int32)

Initialiseert een nieuw exemplaar van de BufferedStream klasse met de opgegeven buffergrootte.

BufferedStream(Stream)

Initialiseert een nieuw exemplaar van de BufferedStream klasse met een standaardbuffergrootte van 4096 bytes.

Eigenschappen

Name Description
BufferSize

Hiermee haalt u de buffergrootte op in bytes voor deze gebufferde stream.

CanRead

Hiermee wordt een waarde opgehaald die aangeeft of de huidige stroom het lezen ondersteunt.

CanSeek

Hiermee wordt een waarde opgehaald die aangeeft of de huidige stroom zoeken ondersteunt.

CanTimeout

Hiermee wordt een waarde opgehaald die bepaalt of er een time-out optreedt voor de huidige stroom.

(Overgenomen van Stream)
CanWrite

Hiermee wordt een waarde opgehaald die aangeeft of de huidige stroom schrijfkracht ondersteunt.

Length

Hiermee haalt u de lengte van de stroom op in bytes.

Position

Hiermee haalt u de positie binnen de huidige stroom op.

ReadTimeout

Hiermee wordt een waarde opgehaald of ingesteld, in milliseconden, die bepaalt hoe lang de stroom probeert te lezen voordat er een time-out optreedt.

(Overgenomen van Stream)
UnderlyingStream

Hiermee haalt u het onderliggende Stream exemplaar voor deze gebufferde stream op.

WriteTimeout

Hiermee wordt een waarde opgehaald of ingesteld, in milliseconden, die bepaalt hoe lang de stream probeert te schrijven voordat er een time-out optreedt.

(Overgenomen van Stream)

Methoden

Name Description
BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)

Begint een asynchrone leesbewerking. (Overweeg in plaats daarvan om te gebruiken ReadAsync(Byte[], Int32, Int32, CancellationToken) .)

BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)

Begint een asynchrone leesbewerking. (Overweeg in plaats daarvan om te gebruiken ReadAsync(Byte[], Int32, Int32) .)

(Overgenomen van Stream)
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)

Hiermee wordt een asynchrone schrijfbewerking gestart. (Overweeg in plaats daarvan om te gebruiken WriteAsync(Byte[], Int32, Int32, CancellationToken) .)

BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)

Hiermee wordt een asynchrone schrijfbewerking gestart. (Overweeg in plaats daarvan om te gebruiken WriteAsync(Byte[], Int32, Int32) .)

(Overgenomen van Stream)
Close()

Sluit de stroom en publiceert alle resources (met name systeemresources, zoals sockets en bestandsingangen) die zijn gekoppeld aan de huidige gebufferde stroom.

Close()

Hiermee sluit u de huidige stroom en worden alle resources (zoals sockets en bestandsingangen) die aan de huidige stroom zijn gekoppeld, vrijgegeven. In plaats van deze methode aan te roepen, moet u ervoor zorgen dat de stream correct wordt verwijderd.

(Overgenomen van Stream)
CopyTo(Stream, Int32)

Leest de bytes uit de huidige stream en schrijft ze naar een andere stroom, met behulp van een opgegeven buffergrootte. Beide streamsposities worden geavanceerd door het aantal gekopieerde bytes.

(Overgenomen van Stream)
CopyTo(Stream)

Leest de bytes uit de huidige stream en schrijft ze naar een andere stream. Beide streamsposities worden geavanceerd door het aantal gekopieerde bytes.

(Overgenomen van Stream)
CopyToAsync(Stream, CancellationToken)

Asynchroon leest de bytes uit de huidige stream en schrijft deze naar een andere stream met behulp van een opgegeven annuleringstoken. Beide streamsposities worden geavanceerd door het aantal gekopieerde bytes.

(Overgenomen van Stream)
CopyToAsync(Stream, Int32, CancellationToken)

Asynchroon leest de bytes uit de huidige stream en schrijft deze naar een andere stroom, met behulp van een opgegeven buffergrootte en annuleringstoken. Beide streamsposities worden geavanceerd door het aantal gekopieerde bytes.

(Overgenomen van Stream)
CopyToAsync(Stream, Int32)

Asynchroon leest de bytes uit de huidige stream en schrijft deze naar een andere stroom, met behulp van een opgegeven buffergrootte. Beide streamsposities worden geavanceerd door het aantal gekopieerde bytes.

(Overgenomen van Stream)
CopyToAsync(Stream)

Asynchroon leest de bytes uit de huidige stream en schrijft ze naar een andere stream. Beide streamsposities worden geavanceerd door het aantal gekopieerde bytes.

(Overgenomen van Stream)
CreateObjRef(Type)

Hiermee maakt u een object dat alle relevante informatie bevat die nodig is om een proxy te genereren die wordt gebruikt om te communiceren met een extern object.

(Overgenomen van MarshalByRefObject)
CreateWaitHandle()
Verouderd.

Wijst een WaitHandle object toe.

(Overgenomen van Stream)
Dispose()

Alle resources die worden gebruikt door de Stream.

(Overgenomen van Stream)
Dispose(Boolean)

Publiceert de niet-beheerde resources die worden gebruikt door de Stream beheerde resources en brengt eventueel de beheerde resources vrij.

(Overgenomen van Stream)
DisposeAsync()

Asynchroon publiceert de onbeheerde resources die worden gebruikt door de gebufferde stroom.

EndRead(IAsyncResult)

Wacht totdat de asynchrone leesbewerking is voltooid. (Overweeg in plaats daarvan om te gebruiken ReadAsync(Byte[], Int32, Int32, CancellationToken) .)

EndRead(IAsyncResult)

Wacht totdat de asynchrone leesbewerking is voltooid. (Overweeg in plaats daarvan om te gebruiken ReadAsync(Byte[], Int32, Int32) .)

(Overgenomen van Stream)
EndWrite(IAsyncResult)

Hiermee beëindigt u een asynchrone schrijfbewerking en blokkeert u deze totdat de I/O-bewerking is voltooid. (Overweeg in plaats daarvan om te gebruiken WriteAsync(Byte[], Int32, Int32, CancellationToken) .)

EndWrite(IAsyncResult)

Hiermee wordt een asynchrone schrijfbewerking beëindigd. (Overweeg in plaats daarvan om te gebruiken WriteAsync(Byte[], Int32, Int32) .)

(Overgenomen van Stream)
Equals(Object)

Bepaalt of het opgegeven object gelijk is aan het huidige object.

(Overgenomen van Object)
Flush()

Wist alle buffers voor deze stroom en zorgt ervoor dat eventuele gebufferde gegevens naar het onderliggende apparaat worden geschreven.

FlushAsync()

Asynchroon wist alle buffers voor deze stroom en zorgt ervoor dat eventuele gebufferde gegevens naar het onderliggende apparaat worden geschreven.

(Overgenomen van Stream)
FlushAsync(CancellationToken)

Asynchroon wist alle buffers voor deze stroom, zorgt ervoor dat gebufferde gegevens naar het onderliggende apparaat worden geschreven en annuleringsaanvragen worden gecontroleerd.

GetHashCode()

Fungeert als de standaardhashfunctie.

(Overgenomen van Object)
GetLifetimeService()

Hiermee haalt u het huidige levensduurserviceobject op waarmee het levensduurbeleid voor dit exemplaar wordt beheerd.

(Overgenomen van MarshalByRefObject)
GetType()

Hiermee haalt u de Type huidige instantie op.

(Overgenomen van Object)
InitializeLifetimeService()

Hiermee haalt u een levensduurserviceobject op om het levensduurbeleid voor dit exemplaar te beheren.

(Overgenomen van MarshalByRefObject)
MemberwiseClone()

Hiermee maakt u een ondiepe kopie van de huidige Object.

(Overgenomen van Object)
MemberwiseClone(Boolean)

Hiermee maakt u een ondiepe kopie van het huidige MarshalByRefObject object.

(Overgenomen van MarshalByRefObject)
ObjectInvariant()
Verouderd.

Biedt ondersteuning voor een Contract.

(Overgenomen van Stream)
Read(Byte[], Int32, Int32)

Hiermee kopieert u bytes van de huidige gebufferde stroom naar een matrix.

Read(Span<Byte>)

Wanneer deze wordt overschreven in een afgeleide klasse, leest u een reeks bytes uit de huidige stroom en wordt de positie binnen de stream verplaatst door het aantal gelezen bytes.

(Overgenomen van Stream)
ReadAsync(Byte[], Int32, Int32, CancellationToken)

Asynchroon leest een reeks bytes uit de huidige stroom, verplaatst de positie binnen de stream door het aantal gelezen bytes en bewaakt annuleringsaanvragen.

ReadAsync(Byte[], Int32, Int32)

Asynchroon leest een reeks bytes uit de huidige stroom en wordt de positie binnen de stream verplaatst door het aantal gelezen bytes.

(Overgenomen van Stream)
ReadAsync(Memory<Byte>, CancellationToken)

Asynchroon leest een reeks bytes uit de huidige stroom, verplaatst de positie binnen de stream door het aantal gelezen bytes en bewaakt annuleringsaanvragen.

(Overgenomen van Stream)
ReadByte()

Leest een byte uit de onderliggende stroom en retourneert de bytecast naar een int, of retourneert -1 als deze vanaf het einde van de stream wordt gelezen.

Seek(Int64, SeekOrigin)

Hiermee stelt u de positie in de huidige bufferstroom in.

SetLength(Int64)

Hiermee stelt u de lengte van de gebufferde stroom in.

ToString()

Retourneert een tekenreeks die het huidige object vertegenwoordigt.

(Overgenomen van Object)
Write(Byte[], Int32, Int32)

Kopieert bytes naar de gebufferde stroom en verplaatst de huidige positie binnen de gebufferde stroom door het aantal geschreven bytes.

Write(ReadOnlySpan<Byte>)

Wanneer deze wordt overschreven in een afgeleide klasse, schrijft u een reeks bytes naar de huidige stroom en wordt de huidige positie binnen deze stroom verplaatst met het aantal geschreven bytes.

(Overgenomen van Stream)
WriteAsync(Byte[], Int32, Int32, CancellationToken)

Asynchroon schrijft een reeks bytes naar de huidige stroom, verplaatst de huidige positie binnen deze stream door het aantal geschreven bytes en bewaakt annuleringsaanvragen.

WriteAsync(Byte[], Int32, Int32)

Asynchroon schrijft een reeks bytes naar de huidige stroom en wordt de huidige positie binnen deze stroom verplaatst door het aantal geschreven bytes.

(Overgenomen van Stream)
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Asynchroon schrijft een reeks bytes naar de huidige stroom, verplaatst de huidige positie binnen deze stream door het aantal geschreven bytes en bewaakt annuleringsaanvragen.

(Overgenomen van Stream)
WriteByte(Byte)

Hiermee schrijft u een byte naar de huidige positie in de gebufferde stroom.

Expliciete interface-implementaties

Name Description
IDisposable.Dispose()

Alle resources die worden gebruikt door de Stream.

(Overgenomen van Stream)

Extensiemethoden

Name Description
ConfigureAwait(IAsyncDisposable, Boolean)

Hiermee configureert u hoe wacht op de taken die worden geretourneerd op basis van een asynchroon wegwerp, worden uitgevoerd.

Van toepassing op

Zie ook