BinaryReader.Read Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Läser byte från den underliggande strömmen och avancerar strömmens aktuella position.
Överlagringar
| Name | Description |
|---|---|
| Read() |
Läser tecken från den underliggande strömmen och för fram strömmens aktuella position i enlighet med det |
| Read(Span<Byte>) |
Läser en sekvens med byte från den aktuella dataströmmen och flyttar positionen inom dataströmmen med antalet lästa byte. |
| Read(Span<Char>) |
Läser, från den aktuella strömmen, samma antal tecken som längden på den angivna bufferten, skriver dem i den angivna bufferten och flyttar fram den aktuella positionen i enlighet med det |
| Read(Byte[], Int32, Int32) |
Läser det angivna antalet byte från strömmen, med början från en angiven punkt i bytematrisen. |
| Read(Char[], Int32, Int32) |
Läser det angivna antalet tecken från strömmen, med början från en angiven punkt i teckenmatrisen. |
Read()
- Källa:
- BinaryReader.cs
- Källa:
- BinaryReader.cs
- Källa:
- BinaryReader.cs
- Källa:
- BinaryReader.cs
- Källa:
- BinaryReader.cs
Läser tecken från den underliggande strömmen och för fram strömmens aktuella position i enlighet med det Encoding använda och det specifika tecken som läse från strömmen.
public:
virtual int Read();
public virtual int Read();
abstract member Read : unit -> int
override this.Read : unit -> int
Public Overridable Function Read () As Integer
Returer
Nästa tecken från indataströmmen eller -1 om inga tecken är tillgängliga för närvarande.
Undantag
Ett I/O-fel uppstod.
Strömmen är stängd.
Exempel
I följande exempel visas hur du läser och skriver data med hjälp av minne som ett lagringsplats för säkerhetskopiering. I det här exemplet visas en lista över ogiltiga filsökvägstecken i konsolen. Även om koden försöker visa en lista över alla ogiltiga filsökvägstecken finns inte alla tecken inom den visningsbara uppsättningen tecken. Eftersom listan över ogiltiga tecken kan variera beroende på systemet kan utdata för den här koden också variera.
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
Kommentarer
BinaryReader återställer inte filpositionen efter en misslyckad läsning.
En lista över vanliga I/O-uppgifter finns i Vanliga I/O-uppgifter.
Se även
Gäller för
Read(Span<Byte>)
- Källa:
- BinaryReader.cs
- Källa:
- BinaryReader.cs
- Källa:
- BinaryReader.cs
- Källa:
- BinaryReader.cs
- Källa:
- BinaryReader.cs
Läser en sekvens med byte från den aktuella dataströmmen och flyttar positionen inom dataströmmen med antalet lästa byte.
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
Parametrar
En region med minne. När den här metoden returnerar ersätts innehållet i den här regionen med byteen som lästs från den aktuella källan.
Returer
Det totala antalet byte som lästs in i bufferten. Detta kan vara mindre än antalet byte som allokerats i bufferten om så många byte för närvarande inte är tillgängliga eller noll (0) om strömmens slut har nåtts.
Undantag
Strömmen är stängd.
Ett I/O-fel uppstod.
Gäller för
Read(Span<Char>)
- Källa:
- BinaryReader.cs
- Källa:
- BinaryReader.cs
- Källa:
- BinaryReader.cs
- Källa:
- BinaryReader.cs
- Källa:
- BinaryReader.cs
Läser, från den aktuella strömmen, samma antal tecken som längden på den angivna bufferten, skriver dem i den angivna bufferten och flyttar fram den aktuella positionen i enlighet med det Encoding använda och det specifika tecken som läse från strömmen.
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
Parametrar
Ett intervall med tecken. När den här metoden returnerar ersätts innehållet i den här regionen med de tecken som lästs från den aktuella källan.
Returer
Det totala antalet tecken som lästs in i bufferten. Detta kan vara mindre än antalet tecken som begärs om så många tecken inte är tillgängliga för närvarande, eller om det kan vara noll om strömmens slut nås.
Undantag
Strömmen är stängd.
Ett I/O-fel uppstod.
Gäller för
Read(Byte[], Int32, Int32)
- Källa:
- BinaryReader.cs
- Källa:
- BinaryReader.cs
- Källa:
- BinaryReader.cs
- Källa:
- BinaryReader.cs
- Källa:
- BinaryReader.cs
Läser det angivna antalet byte från strömmen, med början från en angiven punkt i bytematrisen.
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
Parametrar
- buffer
- Byte[]
Bufferten som data ska läsas in i.
- index
- Int32
Startpunkten i bufferten där du kan börja läsa in bufferten.
- count
- Int32
Antal byte som ska läsas.
Returer
Antalet byte som lästs in i buffer. Det kan vara mindre än antalet begärda byte om så många byte inte är tillgängliga, eller så kan det vara noll om strömmens slut nås.
Undantag
Buffertlängden minus index är mindre än count.
-eller-
Antalet avkodade tecken som ska läsas är större än count. Detta kan inträffa om en Unicode-avkodare returnerar reservtecken eller ett surrogatpar.
buffer är null.
index eller count är negativ.
Strömmen är stängd.
Ett I/O-fel uppstod.
Exempel
I följande exempel visas hur du skriver binära data med hjälp av minne som ett lagringslager. Det visar ett meddelande till konsolen som anger om data har skrivits korrekt.
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
Det här exemplet läser innehållet i en fil och visar varje bytes numeriska värde i 16-kolumnformat. Slutet på filen som läss identifieras när Read metoden returnerar noll byte.
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
Kommentarer
BinaryReader återställer inte filpositionen efter en misslyckad läsåtgärd.
En lista över vanliga I/O-uppgifter finns i Vanliga I/O-uppgifter.
Se även
Gäller för
Read(Char[], Int32, Int32)
- Källa:
- BinaryReader.cs
- Källa:
- BinaryReader.cs
- Källa:
- BinaryReader.cs
- Källa:
- BinaryReader.cs
- Källa:
- BinaryReader.cs
Läser det angivna antalet tecken från strömmen, med början från en angiven punkt i teckenmatrisen.
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
Parametrar
- buffer
- Char[]
Bufferten som data ska läsas in i.
- index
- Int32
Startpunkten i bufferten där du kan börja läsa in bufferten.
- count
- Int32
Antalet tecken som ska läsas.
Returer
Det totala antalet tecken som lästs in i bufferten. Detta kan vara mindre än antalet tecken som begärs om så många tecken inte är tillgängliga för närvarande, eller om det kan vara noll om strömmens slut nås.
Undantag
Buffertlängden minus index är mindre än count.
-eller-
Antalet avkodade tecken som ska läsas är större än count. Detta kan inträffa om en Unicode-avkodare returnerar reservtecken eller ett surrogatpar.
buffer är null.
index eller count är negativ.
Strömmen är stängd.
Ett I/O-fel uppstod.
Exempel
I följande exempel visas hur du läser och skriver data med hjälp av minne som ett lagringsplats för säkerhetskopiering. I det här exemplet visas en lista över ogiltiga filsökvägstecken i konsolen. Även om koden försöker visa en lista över alla ogiltiga filsökvägstecken finns inte alla tecken inom den visningsbara uppsättningen tecken. Eftersom listan över ogiltiga tecken kan variera beroende på systemet kan utdata för den här koden också variera.
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
Kommentarer
BinaryReader återställer inte filpositionen efter en misslyckad läsåtgärd.
En lista över vanliga I/O-uppgifter finns i Vanliga I/O-uppgifter.