BinaryReader.Read Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Odczytuje bajty ze strumienia bazowego i rozwija bieżącą pozycję strumienia.
Przeciążenia
Read() |
Odczytuje znaki ze strumienia bazowego i rozwija bieżącą pozycję strumienia zgodnie z |
Read(Span<Byte>) |
Odczytuje sekwencję bajtów z bieżącego strumienia i rozwija pozycję w strumieniu według liczby odczytanych bajtów. |
Read(Span<Char>) |
Odczytuje z bieżącego strumienia taką samą liczbę znaków, jak długość dostarczonego buforu, zapisuje je w podanym buforze i rozwija bieżącą pozycję zgodnie z |
Read(Byte[], Int32, Int32) |
Odczytuje określoną liczbę bajtów ze strumienia, zaczynając od określonego punktu w tablicy bajtów. |
Read(Char[], Int32, Int32) |
Odczytuje określoną liczbę znaków ze strumienia, zaczynając od określonego punktu w tablicy znaków. |
Read()
- Źródło:
- BinaryReader.cs
- Źródło:
- BinaryReader.cs
- Źródło:
- BinaryReader.cs
Odczytuje znaki ze strumienia bazowego i rozwija bieżącą pozycję strumienia zgodnie z Encoding
używanym i określonym znakiem odczytywanym ze strumienia.
public:
virtual int Read();
public virtual int Read ();
abstract member Read : unit -> int
override this.Read : unit -> int
Public Overridable Function Read () As Integer
Zwraca
Następny znak ze strumienia wejściowego lub -1, jeśli żadne znaki nie są obecnie dostępne.
Wyjątki
Wystąpił błąd we/wy.
Strumień jest zamknięty.
Przykłady
W poniższym przykładzie pokazano, jak odczytywać i zapisywać dane przy użyciu pamięci jako magazynu zaplecza. W tym przykładzie jest wyświetlana lista nieprawidłowych znaków ścieżki pliku do konsoli. Mimo że kod próbuje wyświetlić listę wszystkich nieprawidłowych znaków ścieżki pliku, nie wszystkie znaki znajdują się w wyświetlanym zestawie znaków. Ponieważ lista nieprawidłowych znaków może się różnić w zależności od systemu, dane wyjściowe dla tego kodu również mogą się różnić.
using namespace System;
using namespace System::IO;
int main()
{
int i;
array<Char>^invalidPathChars = Path::InvalidPathChars;
MemoryStream^ memStream = gcnew MemoryStream;
BinaryWriter^ binWriter = gcnew BinaryWriter( memStream );
// Write to memory.
binWriter->Write( "Invalid file path characters are: " );
for ( i = 0; i < invalidPathChars->Length; i++ )
{
binWriter->Write( invalidPathChars[ i ] );
}
// Create the reader using the same MemoryStream
// as used with the writer.
BinaryReader^ binReader = gcnew BinaryReader( memStream );
// Set Position to the beginning of the stream.
binReader->BaseStream->Position = 0;
// Read the data from memory and write it to the console.
Console::Write( binReader->ReadString() );
array<Char>^memoryData = gcnew array<Char>(memStream->Length - memStream->Position);
for ( i = 0; i < memoryData->Length; i++ )
{
memoryData[ i ] = Convert::ToChar( binReader->Read() );
}
Console::WriteLine( memoryData );
}
using System;
using System.IO;
class BinaryRW
{
static void Main()
{
int i = 0;
char[] invalidPathChars = Path.InvalidPathChars;
MemoryStream memStream = new MemoryStream();
BinaryWriter binWriter = new BinaryWriter(memStream);
// Write to memory.
binWriter.Write("Invalid file path characters are: ");
for(i = 0; i < invalidPathChars.Length; i++)
{
binWriter.Write(invalidPathChars[i]);
}
// Create the reader using the same MemoryStream
// as used with the writer.
BinaryReader binReader = new BinaryReader(memStream);
// Set Position to the beginning of the stream.
memStream.Position = 0;
// Read the data from memory and write it to the console.
Console.Write(binReader.ReadString());
char[] memoryData =
new char[memStream.Length - memStream.Position];
for(i = 0; i < memoryData.Length; i++)
{
memoryData[i] = Convert.ToChar(binReader.Read());
}
Console.WriteLine(memoryData);
}
}
open System
open System.IO
let invalidPathChars = Path.GetInvalidPathChars()
let memStream = new MemoryStream()
let binWriter = new BinaryWriter(memStream)
// Write to memory.
printf "Invalid file path characters are: "
for i = 0 to invalidPathChars.Length - 1 do
binWriter.Write invalidPathChars[i]
// Create the reader using the same MemoryStream
// as used with the writer.
let binReader = new BinaryReader(memStream)
// Set Position to the beginning of the stream.
memStream.Position <- 0
// Read the data from memory and write it to the console.
printf $"{binReader.ReadString()}"
let memoryData =
[| for _ = 0L to memStream.Length - memStream.Position - 1L do
Convert.ToChar(binReader.Read()) |]
printfn $"{memoryData}"
Imports System.IO
Public Class BinaryRW
Shared Sub Main()
Dim i As Integer = 0
Dim invalidPathChars() As Char = Path.InvalidPathChars
Dim memStream As new MemoryStream()
Dim binWriter As New BinaryWriter(memStream)
' Write to memory.
binWriter.Write("Invalid file path characters are: ")
For i = 0 To invalidPathChars.Length - 1
binWriter.Write(invalidPathChars(i))
Next i
' Create the reader using the same MemoryStream
' as used with the writer.
Dim binReader As New BinaryReader(memStream)
' Set Position to the beginning of the stream.
memStream.Position = 0
' Read the data from memory and write it to the console.
Console.Write(binReader.ReadString())
Dim memoryData( _
CInt(memStream.Length - memStream.Position) - 1) As Char
For i = 0 To memoryData.Length - 1
memoryData(i) = Convert.ToChar(binReader.Read())
Next i
Console.WriteLine(memoryData)
End Sub
End Class
Uwagi
BinaryReader nie przywraca pozycji pliku po nieudanym odczytaniu.
Aby uzyskać listę typowych zadań we/wy, zobacz Typowe zadania we/wy.
Zobacz też
- Encoding
- Plik i Stream we/wy
- Instrukcje: Odczytywanie tekstu z pliku
- Instrukcje: Zapisywanie tekstu w pliku
Dotyczy
Read(Span<Byte>)
- Źródło:
- BinaryReader.cs
- Źródło:
- BinaryReader.cs
- Źródło:
- BinaryReader.cs
Odczytuje sekwencję bajtów z bieżącego strumienia i rozwija pozycję w strumieniu według liczby odczytanych bajtów.
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
Region pamięci. Gdy ta metoda zwróci, zawartość tego regionu jest zastępowana bajtami odczytanych z bieżącego źródła.
Zwraca
Całkowita liczba bajtów odczytanych do buforu. Może to być mniej niż liczba bajtów przydzielonych w buforze, jeśli liczba bajtów nie jest obecnie dostępna lub zero (0), jeśli koniec strumienia został osiągnięty.
Wyjątki
Strumień jest zamknięty.
Wystąpił błąd we/wy.
Dotyczy
Read(Span<Char>)
- Źródło:
- BinaryReader.cs
- Źródło:
- BinaryReader.cs
- Źródło:
- BinaryReader.cs
Odczytuje z bieżącego strumienia taką samą liczbę znaków, jak długość dostarczonego buforu, zapisuje je w podanym buforze i rozwija bieżącą pozycję zgodnie z Encoding
używanym i określonym znakiem odczytywanym ze strumienia.
public:
virtual int Read(Span<char> buffer);
public virtual int Read (Span<char> buffer);
abstract member Read : Span<char> -> int
override this.Read : Span<char> -> int
Public Overridable Function Read (buffer As Span(Of Char)) As Integer
Parametry
Zakres znaków. Gdy ta metoda zwróci, zawartość tego regionu jest zastępowana przez znaki odczytywane z bieżącego źródła.
Zwraca
Całkowita liczba znaków odczytanych do buforu. Może to być mniej niż liczba znaków żądanych, jeśli wiele znaków nie jest obecnie dostępnych lub może to być zero, jeśli koniec strumienia zostanie osiągnięty.
Wyjątki
Strumień jest zamknięty.
Wystąpił błąd we/wy.
Dotyczy
Read(Byte[], Int32, Int32)
- Źródło:
- BinaryReader.cs
- Źródło:
- BinaryReader.cs
- Źródło:
- BinaryReader.cs
Odczytuje określoną liczbę bajtów ze strumienia, zaczynając od określonego punktu w tablicy bajtów.
public:
virtual int Read(cli::array <System::Byte> ^ buffer, int index, int count);
public virtual int Read (byte[] buffer, int index, int count);
abstract member Read : byte[] * int * int -> int
override this.Read : byte[] * int * int -> int
Public Overridable Function Read (buffer As Byte(), index As Integer, count As Integer) As Integer
Parametry
- buffer
- Byte[]
Bufor do odczytu danych.
- index
- Int32
Punkt początkowy w buforze, w którym należy rozpocząć odczytywanie do buforu.
- count
- Int32
Liczba bajtów do odczytania.
Zwraca
Liczba bajtów odczytanych do buffer
elementu . Może to być mniej niż liczba bajtów żądanych, jeśli liczba bajtów jest niedostępna lub może to być zero, jeśli koniec strumienia zostanie osiągnięty.
Wyjątki
Długość buforu minus index
jest mniejsza niż count
.
-lub-
Liczba zdekodowanych znaków do odczytania jest większa niż count
. Może się to zdarzyć, jeśli dekoder Unicode zwraca znaki powrotu lub parę zastępczą.
buffer
to null
.
index
lub count
jest ujemny.
Strumień jest zamknięty.
Wystąpił błąd we/wy.
Przykłady
W poniższym przykładzie pokazano, jak zapisywać dane binarne przy użyciu pamięci jako magazynu zaplecza. Wyświetla komunikat do konsoli, który wskazuje, czy dane zostały zapisane poprawnie.
using System;
using System.IO;
namespace BinaryRW
{
class Program
{
static void Main(string[] args)
{
const int arrayLength = 1000;
byte[] dataArray = new byte[arrayLength];
byte[] verifyArray = new byte[arrayLength];
new Random().NextBytes(dataArray);
using (BinaryWriter binWriter = new BinaryWriter(new MemoryStream()))
{
Console.WriteLine("Writing the data.");
binWriter.Write(dataArray, 0, arrayLength);
using (BinaryReader binReader = new BinaryReader(binWriter.BaseStream))
{
binReader.BaseStream.Position = 0;
if (binReader.Read(verifyArray, 0, arrayLength) != arrayLength)
{
Console.WriteLine("Error writing the data.");
return;
}
}
}
for (int i = 0; i < arrayLength; i++)
{
if (verifyArray[i] != dataArray[i])
{
Console.WriteLine("Error writing the data.");
return;
}
}
Console.WriteLine("The data was written and verified.");
}
}
}
open System
open System.IO
let arrayLength = 1000
let dataArray = Array.zeroCreate<byte> arrayLength
let verifyArray = Array.zeroCreate<byte> arrayLength
Random().NextBytes dataArray
do
use binWriter = new BinaryWriter(new MemoryStream())
printfn "Writing the data."
binWriter.Write(dataArray, 0, arrayLength)
use binReader = new BinaryReader(binWriter.BaseStream)
binReader.BaseStream.Position <- 0
if binReader.Read(verifyArray, 0, arrayLength) <> arrayLength then
printfn "Error writing the data."
else
for i = 0 to arrayLength - 1 do
if verifyArray[i] <> dataArray[i] then
printfn "Error writing the data."
else
printfn "The data was written and verified."
Imports System.IO
Module Module1
Sub Main()
Const upperBound As Integer = 1000
Dim dataArray(upperBound) As Byte
Dim verifyArray(upperBound) As Byte
Dim randomGenerator As New Random
randomGenerator.NextBytes(dataArray)
Using binWriter As New BinaryWriter(New MemoryStream())
Console.WriteLine("Writing the data.")
binWriter.Write(dataArray, 0, dataArray.Length)
Using binReader As New BinaryReader(binWriter.BaseStream)
binReader.BaseStream.Position = 0
If binReader.Read(verifyArray, 0, dataArray.Length) <> dataArray.Length Then
Console.WriteLine("Error writing the data.")
Return
End If
End Using
End Using
For i As Integer = 0 To upperBound
If verifyArray(i) <> dataArray(i) Then
Console.WriteLine("Error writing the data.")
Return
End If
Next i
Console.WriteLine("The data was written and verified.")
End Sub
End Module
Ten przykład odczytuje zawartość pliku i wyświetla wartość liczbową każdego bajtu w formacie 16-kolumnowym. Koniec odczytywanego pliku jest wykrywany, gdy Read metoda zwraca zero bajtów.
using System;
using System.IO;
using System.Text;
public class DumpFileSample
{
private static readonly int CHUNK_SIZE = 1024;
public static void Main(String[] args)
{
if ((args.Length == 0) || !File.Exists(args[0]))
{
Console.WriteLine("Please provide an existing file name.");
}
else
{
using (FileStream fs = new FileStream(args[0], FileMode.Open, FileAccess.Read))
{
using (BinaryReader br = new BinaryReader(fs, new ASCIIEncoding()))
{
byte[] chunk;
chunk = br.ReadBytes(CHUNK_SIZE);
while(chunk.Length > 0)
{
DumpBytes(chunk, chunk.Length);
chunk = br.ReadBytes(CHUNK_SIZE);
}
}
}
}
}
public static void DumpBytes(byte[] bdata, int len)
{
int i;
int j = 0;
char dchar;
// 3 * 16 chars for hex display, 16 chars for text and 8 chars
// for the 'gutter' int the middle.
StringBuilder dumptext = new StringBuilder(" ", 16 * 4 + 8);
for (i = 0; i < len; i++)
{
dumptext.Insert(j * 3, String.Format("{0:X2} ", (int)bdata[i]));
dchar = (char)bdata[i];
//' replace 'non-printable' chars with a '.'.
if (Char.IsWhiteSpace(dchar) || Char.IsControl(dchar))
{
dchar = '.';
}
dumptext.Append(dchar);
j++;
if (j == 16)
{
Console.WriteLine(dumptext);
dumptext.Length = 0;
dumptext.Append(" ");
j = 0;
}
}
// display the remaining line
if (j > 0)
{
for (i = j; i < 16; i++)
{
dumptext.Insert(j * 3, " ");
}
Console.WriteLine(dumptext);
}
}
}
open System
open System.IO
open System.Text
let CHUNK_SIZE = 1024
let dumpBytes (bdata: byte[]) len =
let mutable j = 0
// 3 * 16 chars for hex display, 16 chars for text and 8 chars
// for the 'gutter' int the middle.
let dumptext = StringBuilder(" ", 16 * 4 + 8)
for i = 0 to len - 1 do
dumptext.Insert(j * 3, $"{int bdata[i]:X2} ") |> ignore
let dchar = char bdata[i]
//' replace 'non-printable' chars with a '.'.
let dchar =
if Char.IsWhiteSpace dchar || Char.IsControl dchar then
'.'
else
dchar
dumptext.Append dchar |> ignore
j <- j + 1
if j = 16 then
printfn $"{dumptext}"
dumptext.Length <- 0
dumptext.Append " " |> ignore
j <- 0
// display the remaining line
if j > 0 then
for i = j to 15 do
dumptext.Insert(j * 3, " ") |> ignore
printfn $"{dumptext}"
[<EntryPoint>]
let main args =
if args.Length = 0 || File.Exists args[0] |> not then
printfn "Please provide an existing file name."
else
use fs = new FileStream(args[0], FileMode.Open, FileAccess.Read)
use br = new BinaryReader(fs, ASCIIEncoding())
let mutable chunk = br.ReadBytes CHUNK_SIZE
while chunk.Length > 0 do
dumpBytes chunk chunk.Length
chunk <- br.ReadBytes CHUNK_SIZE
0
Imports System.IO
Imports System.Text
Module Module1
Private ReadOnly CHUNK_SIZE As Integer = 1024
Public Sub Main(args() As String)
If ((args.Length = 0) OrElse Not File.Exists(args(0))) Then
Console.WriteLine("Please provide an existing file name.")
Else
Using fs As FileStream = New FileStream(args(0), FileMode.Open, FileAccess.Read)
Using br As New BinaryReader(fs, New ASCIIEncoding())
Dim chunk(CHUNK_SIZE) As Byte
chunk = br.ReadBytes(CHUNK_SIZE)
While chunk.Length > 0
DumpBytes(chunk, chunk.Length)
chunk = br.ReadBytes(CHUNK_SIZE)
End While
End Using
End Using
End If
End Sub
Public Sub DumpBytes(bdata() As Byte, len As Integer)
Dim i As Integer
Dim j As Integer = 0
Dim dchar As Char
' 3 * 16 chars for hex display, 16 chars for text and 8 chars
' for the 'gutter' int the middle.
Dim dumptext As New StringBuilder(" ", 16 * 4 + 8)
For i = 0 To len - 1
dumptext.Insert(j * 3, String.Format("{0:X2} ", CType(bdata(i), Integer)))
dchar = Convert.ToChar(bdata(i))
' replace 'non-printable' chars with a '.'.
If Char.IsWhiteSpace(dchar) Or Char.IsControl(dchar) Then
dchar = "."
End If
dumptext.Append(dchar)
j += 1
If j = 16 Then
Console.WriteLine(dumptext)
dumptext.Length = 0
dumptext.Append(" ")
j = 0
End If
Next i
' display the remaining line
If j > 0 Then
' add blank hex spots to align the 'gutter'.
For i = j To 15
dumptext.Insert(j * 3, " ")
Next i
Console.WriteLine(dumptext)
End If
End Sub
End Module
Uwagi
BinaryReader nie przywraca pozycji pliku po nieudanej operacji odczytu.
Aby uzyskać listę typowych zadań we/wy, zobacz Typowe zadania we/wy.
Zobacz też
Dotyczy
Read(Char[], Int32, Int32)
- Źródło:
- BinaryReader.cs
- Źródło:
- BinaryReader.cs
- Źródło:
- BinaryReader.cs
Odczytuje określoną liczbę znaków ze strumienia, zaczynając od określonego punktu w tablicy znaków.
public:
virtual int Read(cli::array <char> ^ buffer, int index, int count);
public virtual int Read (char[] buffer, int index, int count);
abstract member Read : char[] * int * int -> int
override this.Read : char[] * int * int -> int
Public Overridable Function Read (buffer As Char(), index As Integer, count As Integer) As Integer
Parametry
- buffer
- Char[]
Bufor do odczytu danych.
- index
- Int32
Punkt początkowy w buforze, w którym należy rozpocząć odczytywanie do buforu.
- count
- Int32
Liczba znaków do odczytania.
Zwraca
Całkowita liczba znaków odczytanych do buforu. Może to być mniej niż liczba znaków żądanych, jeśli wiele znaków nie jest obecnie dostępnych lub może to być zero, jeśli koniec strumienia zostanie osiągnięty.
Wyjątki
Długość buforu minus index
jest mniejsza niż count
.
-lub-
Liczba zdekodowanych znaków do odczytania jest większa niż count
. Może się to zdarzyć, jeśli dekoder Unicode zwraca znaki powrotu lub parę zastępczą.
buffer
to null
.
index
lub count
jest ujemny.
Strumień jest zamknięty.
Wystąpił błąd we/wy.
Przykłady
W poniższym przykładzie pokazano, jak odczytywać i zapisywać dane przy użyciu pamięci jako magazynu zaplecza. W tym przykładzie jest wyświetlana lista nieprawidłowych znaków ścieżki pliku do konsoli. Mimo że kod próbuje wyświetlić listę wszystkich nieprawidłowych znaków ścieżki pliku, nie wszystkie znaki znajdują się w wyświetlanym zestawie znaków. Ponieważ lista nieprawidłowych znaków może się różnić w zależności od systemu, dane wyjściowe dla tego kodu również mogą się różnić.
using namespace System;
using namespace System::IO;
int main()
{
array<Char>^invalidPathChars = Path::InvalidPathChars;
MemoryStream^ memStream = gcnew MemoryStream;
BinaryWriter^ binWriter = gcnew BinaryWriter( memStream );
// Write to memory.
binWriter->Write( "Invalid file path characters are: " );
binWriter->Write( Path::InvalidPathChars, 0, Path::InvalidPathChars->Length );
// Create the reader using the same MemoryStream
// as used with the writer.
BinaryReader^ binReader = gcnew BinaryReader( memStream );
// Set Position to the beginning of the stream.
binReader->BaseStream->Position = 0;
// Read the data from memory and write it to the console.
Console::Write( binReader->ReadString() );
int arraySize = (int)(memStream->Length - memStream->Position);
array<Char>^memoryData = gcnew array<Char>(arraySize);
binReader->Read( memoryData, 0, arraySize );
Console::WriteLine( memoryData );
}
using System;
using System.IO;
class BinaryRW
{
static void Main()
{
char[] invalidPathChars = Path.InvalidPathChars;
MemoryStream memStream = new MemoryStream();
BinaryWriter binWriter = new BinaryWriter(memStream);
// Write to memory.
binWriter.Write("Invalid file path characters are: ");
binWriter.Write(
Path.InvalidPathChars, 0, Path.InvalidPathChars.Length);
// Create the reader using the same MemoryStream
// as used with the writer.
BinaryReader binReader = new BinaryReader(memStream);
// Set Position to the beginning of the stream.
memStream.Position = 0;
// Read the data from memory and write it to the console.
Console.Write(binReader.ReadString());
int arraySize = (int)(memStream.Length - memStream.Position);
char[] memoryData = new char[arraySize];
binReader.Read(memoryData, 0, arraySize);
Console.WriteLine(memoryData);
}
}
open System.IO
let invalidPathChars = Path.GetInvalidPathChars()
let memStream = new MemoryStream()
let binWriter = new BinaryWriter(memStream)
// Write to memory.
binWriter.Write "Invalid file path characters are: "
binWriter.Write(invalidPathChars, 0, invalidPathChars.Length)
// Create the reader using the same MemoryStream
// as used with the writer.
let binReader = new BinaryReader(memStream)
// Set Position to the beginning of the stream.
memStream.Position <- 0
// Read the data from memory and write it to the console.
printf $"{binReader.ReadString()}"
let arraySize = memStream.Length - memStream.Position |> int
let memoryData = Array.zeroCreate<char> arraySize
binReader.Read(memoryData, 0, arraySize) |> ignore
printfn $"{memoryData}"
Imports System.IO
Public Class BinaryRW
Shared Sub Main()
Dim invalidPathChars() As Char = Path.InvalidPathChars
Dim memStream As new MemoryStream()
Dim binWriter As New BinaryWriter(memStream)
' Write to memory.
binWriter.Write("Invalid file path characters are: ")
binWriter.Write(Path.InvalidPathChars, 0, _
Path.InvalidPathChars.Length)
' Create the reader using the same MemoryStream
' as used with the writer.
Dim binReader As New BinaryReader(memStream)
' Set Position to the beginning of the stream.
memStream.Position = 0
' Read the data from memory and write it to the console.
Console.Write(binReader.ReadString())
Dim upperBound As Integer = _
CInt(memStream.Length - memStream.Position) - 1
Dim memoryData(upperBound) As Char
binReader.Read(memoryData, 0, upperBound)
Console.WriteLine(memoryData)
End Sub
End Class
Uwagi
BinaryReader nie przywraca pozycji pliku po nieudanej operacji odczytu.
Aby uzyskać listę typowych zadań we/wy, zobacz Typowe zadania we/wy.