Stream.Read Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Přetížení
Read(Span<Byte>) |
Při přepsání v odvozené třídě přečte posloupnost bajtů z aktuálního datového proudu a posune pozici v rámci datového proudu o počet přečtených bajtů. |
Read(Byte[], Int32, Int32) |
Při přepsání v odvozené třídě přečte posloupnost bajtů z aktuálního datového proudu a posune pozici v rámci datového proudu o počet přečtených bajtů. |
Read(Span<Byte>)
- Zdroj:
- Stream.cs
- Zdroj:
- Stream.cs
- Zdroj:
- Stream.cs
Při přepsání v odvozené třídě přečte posloupnost bajtů z aktuálního datového proudu a posune pozici v rámci datového proudu o počet přečtených bajtů.
public:
virtual int Read(Span<System::Byte> buffer);
public virtual int Read (Span<byte> buffer);
abstract member Read : Span<byte> -> int
override this.Read : Span<byte> -> int
Public Overridable Function Read (buffer As Span(Of Byte)) As Integer
Parametry
Oblast paměti. Při vrácení této metody se obsah této oblasti nahradí bajty načtenými z aktuálního zdroje.
Návraty
Celkový počet bajtů načtených do vyrovnávací paměti. To může být menší než velikost vyrovnávací paměti, pokud tento počet bajtů není aktuálně k dispozici, nebo nula (0), pokud je délka vyrovnávací paměti nula nebo bylo dosaženo konce datového proudu.
Poznámky
CanRead Pomocí vlastnosti určete, jestli aktuální instance podporuje čtení. K asynchronnímu čtení z aktuálního datového ReadAsync proudu použijte metodu .
Implementace této metody načtou maximální počet bajtů z aktuálního buffer.Length
datového proudu a uloží je do buffer
. Aktuální pozice v rámci streamu je rozšířena o počet přečtených bajtů; Pokud však dojde k výjimce, aktuální pozice v rámci datového proudu zůstane beze změny. Implementace vrátí počet přečtených bajtů. Pokud je požadováno více než nula bajtů, implementace operaci nedokončí, dokud nebude možné přečíst alespoň jeden bajt dat (pokud bylo požadováno nula bajtů, některé implementace se podobně nemusí dokončit, dokud nebude k dispozici alespoň jeden bajt, ale v takovém případě se ze streamu nebudou spotřebovávat žádná data). Read vrátí hodnotu 0 pouze v případě, že byl požadován žádný bajt nebo pokud datový proud neobsahuje žádná další data a neočekává se žádné další (například uzavřený soket nebo konec souboru). Implementace může bezplatně vracet méně bajtů, než je požadováno, i když nebylo dosaženo konce datového proudu.
Slouží BinaryReader ke čtení primitivních datových typů.
Platí pro
Read(Byte[], Int32, Int32)
- Zdroj:
- Stream.cs
- Zdroj:
- Stream.cs
- Zdroj:
- Stream.cs
Při přepsání v odvozené třídě přečte posloupnost bajtů z aktuálního datového proudu a posune pozici v rámci datového proudu o počet přečtených bajtů.
public:
abstract int Read(cli::array <System::Byte> ^ buffer, int offset, int count);
public abstract int Read (byte[] buffer, int offset, int count);
abstract member Read : byte[] * int * int -> int
Public MustOverride Function Read (buffer As Byte(), offset As Integer, count As Integer) As Integer
Parametry
- buffer
- Byte[]
Pole bajtů. Když se tato metoda vrátí, vyrovnávací paměť obsahuje zadané pole bajtů s hodnotami mezi offset
a (offset
+ count
- 1) nahrazené bajty načtenými z aktuálního zdroje.
- offset
- Int32
Nulový odsazení bajtů, při buffer
kterém se mají začít ukládat data načtená z aktuálního datového proudu.
- count
- Int32
Maximální počet bajtů, které se mají načíst z aktuálního datového proudu.
Návraty
Celkový počet bajtů načtených do vyrovnávací paměti. To může být menší než počet požadovaných bajtů, pokud tento počet bajtů není aktuálně k dispozici, nebo nula (0), pokud count
je 0 nebo bylo dosaženo konce datového proudu.
Výjimky
Součet offset
a count
je větší než délka vyrovnávací paměti.
buffer
je null
.
offset
nebo count
je negativní.
Dojde k vstupně-výstupní chybě.
Stream nepodporuje čtení.
Metody byly volány po zavření datového proudu.
Příklady
Následující příklad ukazuje, jak použít Read ke čtení bloku dat.
using namespace System;
using namespace System::IO;
public ref class Block
{
public:
static void Main()
{
Stream^ s = gcnew MemoryStream();
for (int i = 0; i < 100; i++)
{
s->WriteByte((Byte)i);
}
s->Position = 0;
// Now read s into a byte buffer.
array<Byte>^ bytes = gcnew array<Byte>(s->Length);
int numBytesToRead = (int) s->Length;
int numBytesRead = 0;
while (numBytesToRead > 0)
{
// Read may return anything from 0 to 10.
int n = s->Read(bytes, numBytesRead, 10);
// The end of the file is reached.
if (n == 0)
{
break;
}
numBytesRead += n;
numBytesToRead -= n;
}
s->Close();
// numBytesToRead should be 0 now, and numBytesRead should
// equal 100.
Console::WriteLine("number of bytes read: {0:d}", numBytesRead);
}
};
int main()
{
Block::Main();
}
using System;
using System.IO;
public class Block
{
public static void Main()
{
Stream s = new MemoryStream();
for (int i = 0; i < 122; i++)
{
s.WriteByte((byte)i);
}
s.Position = 0;
// Now read s into a byte buffer with a little padding.
byte[] bytes = new byte[s.Length + 10];
int numBytesToRead = (int)s.Length;
int numBytesRead = 0;
do
{
// Read may return anything from 0 to 10.
int n = s.Read(bytes, numBytesRead, 10);
numBytesRead += n;
numBytesToRead -= n;
} while (numBytesToRead > 0);
s.Close();
Console.WriteLine("number of bytes read: {0:d}", numBytesRead);
}
}
Imports System.IO
Public Class Block
Public Shared Sub Main()
Dim s As Stream = New MemoryStream()
For i As Integer = 0 To 121
s.WriteByte(CType(i, Byte))
Next i
s.Position = 0
' Now read s into a byte buffer that is padded slightly.
Dim bytes(s.Length + 10) As Byte
Dim numBytesToRead As Integer = s.Length
Dim numBytesRead As Integer = 0
Dim n As Integer
Do
' Read may return anything from 0 to 10.
n = s.Read(bytes, numBytesRead, 10)
' The end of the file is reached.
numBytesRead += n
numBytesToRead -= n
Loop While numBytesToRead > 0
s.Close()
Console.WriteLine("number of bytes read: {0:d}", numBytesRead)
End Sub
End Class
Poznámky
CanRead Pomocí vlastnosti určete, jestli aktuální instance podporuje čtení. K asynchronnímu čtení z aktuálního datového ReadAsync proudu použijte metodu .
Implementace této metody načtou maximální počet bajtů z aktuálního count
datového proudu a uloží je na buffer
začátku od offset
. Aktuální pozice v rámci streamu je rozšířena o počet přečtených bajtů; Pokud však dojde k výjimce, aktuální pozice v rámci datového proudu zůstane beze změny. Implementace vrátí počet přečtených bajtů. Pokud je požadováno více než nula bajtů, implementace operaci nedokončí, dokud nebude možné číst alespoň jeden bajt dat (některé implementace se podobně nemusí dokončit, dokud nebude k dispozici alespoň jeden bajt, i když byl požadován žádný bajt, ale v takovém případě se ze streamu nebudou spotřebovávat žádná data). Read vrátí hodnotu 0 pouze v případě, že byl požadován žádný bajt nebo pokud datový proud neobsahuje žádná další data a neočekává se žádné další (například uzavřený soket nebo konec souboru). Implementace může bezplatně vracet méně bajtů, než je požadováno, i když nebylo dosaženo konce datového proudu.
Slouží BinaryReader ke čtení primitivních datových typů.
Viz také
- Vstupně-výstupní operace souborů a Stream
- Postupy: Čtení textu ze souboru
- Postupy: Zápis textu do souboru