BinaryReader.Read Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Membaca byte dari aliran yang mendasar dan memajukan posisi aliran saat ini.
Overload
Read() |
Membaca karakter dari aliran yang mendasar dan memajukan posisi aliran saat ini sesuai dengan karakter yang |
Read(Span<Byte>) |
Membaca urutan byte dari aliran saat ini dan memajukan posisi dalam aliran dengan jumlah byte yang dibaca. |
Read(Span<Char>) |
Membaca, dari aliran saat ini, jumlah karakter yang sama dengan panjang buffer yang disediakan, menulisnya di buffer yang disediakan, dan memajukan posisi saat ini sesuai dengan |
Read(Byte[], Int32, Int32) |
Membaca jumlah byte yang ditentukan dari aliran, mulai dari titik tertentu dalam array byte. |
Read(Char[], Int32, Int32) |
Membaca jumlah karakter yang ditentukan dari aliran, dimulai dari titik tertentu dalam array karakter. |
Read()
- Sumber:
- BinaryReader.cs
- Sumber:
- BinaryReader.cs
- Sumber:
- BinaryReader.cs
Membaca karakter dari aliran yang mendasar dan memajukan posisi aliran saat ini sesuai dengan karakter yang Encoding
digunakan dan karakter tertentu yang dibaca dari aliran.
public:
virtual int Read();
public virtual int Read ();
abstract member Read : unit -> int
override this.Read : unit -> int
Public Overridable Function Read () As Integer
Mengembalikan
Karakter berikutnya dari aliran input, atau -1 jika saat ini tidak ada karakter yang tersedia.
Pengecualian
Terjadi kesalahan I/O.
Aliran ditutup.
Contoh
Contoh berikut menunjukkan cara membaca dan menulis data menggunakan memori sebagai penyimpanan cadangan. Contoh ini menampilkan daftar karakter jalur file yang tidak valid ke konsol. Meskipun kode mencoba menampilkan daftar semua karakter jalur file yang tidak valid, tidak semua karakter berada dalam kumpulan karakter yang dapat ditampilkan. Karena daftar karakter yang tidak valid dapat bervariasi berdasarkan sistem, output untuk kode ini juga dapat bervariasi.
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
Keterangan
BinaryReader tidak memulihkan posisi file setelah pembacaan gagal.
Untuk daftar tugas I/O umum, lihat Tugas I/O Umum.
Lihat juga
Berlaku untuk
Read(Span<Byte>)
- Sumber:
- BinaryReader.cs
- Sumber:
- BinaryReader.cs
- Sumber:
- BinaryReader.cs
Membaca urutan byte dari aliran saat ini dan memajukan posisi dalam aliran dengan jumlah byte yang dibaca.
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
Parameter
Wilayah memori. Ketika metode ini kembali, konten wilayah ini digantikan oleh byte yang dibaca dari sumber saat ini.
Mengembalikan
Jumlah total byte yang dibaca ke dalam buffer. Ini bisa kurang dari jumlah byte yang dialokasikan di buffer jika banyak byte saat ini tidak tersedia, atau nol (0) jika akhir aliran telah tercapai.
Pengecualian
Aliran ditutup.
Terjadi kesalahan I/O.
Berlaku untuk
Read(Span<Char>)
- Sumber:
- BinaryReader.cs
- Sumber:
- BinaryReader.cs
- Sumber:
- BinaryReader.cs
Membaca, dari aliran saat ini, jumlah karakter yang sama dengan panjang buffer yang disediakan, menulisnya di buffer yang disediakan, dan memajukan posisi saat ini sesuai dengan Encoding
karakter yang digunakan dan karakter tertentu yang dibaca dari aliran.
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
Parameter
Rentang karakter. Ketika metode ini kembali, konten wilayah ini digantikan oleh karakter yang dibaca dari sumber saat ini.
Mengembalikan
Jumlah total karakter yang dibaca ke dalam buffer. Ini mungkin kurang dari jumlah karakter yang diminta jika banyak karakter yang saat ini tidak tersedia, atau mungkin nol jika akhir aliran tercapai.
Pengecualian
Aliran ditutup.
Terjadi kesalahan I/O.
Berlaku untuk
Read(Byte[], Int32, Int32)
- Sumber:
- BinaryReader.cs
- Sumber:
- BinaryReader.cs
- Sumber:
- BinaryReader.cs
Membaca jumlah byte yang ditentukan dari aliran, mulai dari titik tertentu dalam array byte.
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
Parameter
- buffer
- Byte[]
Buffer untuk membaca data.
- index
- Int32
Titik awal dalam buffer untuk mulai membaca ke dalam buffer.
- count
- Int32
Jumlah byte yang akan dibaca.
Mengembalikan
Jumlah byte yang dibaca ke dalam buffer
. Ini mungkin kurang dari jumlah byte yang diminta jika banyak byte tidak tersedia, atau mungkin nol jika akhir aliran tercapai.
Pengecualian
Panjang buffer minus index
kurang dari count
.
-atau-
Jumlah karakter yang didekodekan untuk dibaca lebih besar dari count
. Ini dapat terjadi jika dekoder Unicode mengembalikan karakter fallback atau pasangan pengganti.
buffer
adalah null
.
index
atau count
negatif.
Aliran ditutup.
Terjadi kesalahan I/O.
Contoh
Contoh berikut menunjukkan cara menulis data biner dengan menggunakan memori sebagai penyimpanan cadangan. Ini menampilkan pesan ke konsol yang menunjukkan apakah data ditulis dengan benar.
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
Contoh ini membaca konten file dan menampilkan nilai numerik setiap byte dalam format 16 kolom. Akhir file yang sedang dibaca terdeteksi ketika Read metode mengembalikan nol 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
Keterangan
BinaryReader tidak memulihkan posisi file setelah operasi baca yang gagal.
Untuk daftar tugas I/O umum, lihat Tugas I/O Umum.
Lihat juga
Berlaku untuk
Read(Char[], Int32, Int32)
- Sumber:
- BinaryReader.cs
- Sumber:
- BinaryReader.cs
- Sumber:
- BinaryReader.cs
Membaca jumlah karakter yang ditentukan dari aliran, dimulai dari titik tertentu dalam array karakter.
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
Parameter
- buffer
- Char[]
Buffer untuk membaca data.
- index
- Int32
Titik awal dalam buffer untuk mulai membaca ke dalam buffer.
- count
- Int32
Jumlah karakter yang akan dibaca.
Mengembalikan
Jumlah total karakter yang dibaca ke dalam buffer. Ini mungkin kurang dari jumlah karakter yang diminta jika banyak karakter yang saat ini tidak tersedia, atau mungkin nol jika akhir aliran tercapai.
Pengecualian
Panjang buffer minus index
kurang dari count
.
-atau-
Jumlah karakter yang didekodekan untuk dibaca lebih besar dari count
. Ini dapat terjadi jika dekoder Unicode mengembalikan karakter fallback atau pasangan pengganti.
buffer
adalah null
.
index
atau count
negatif.
Aliran ditutup.
Terjadi kesalahan I/O.
Contoh
Contoh berikut menunjukkan cara membaca dan menulis data menggunakan memori sebagai penyimpanan cadangan. Contoh ini menampilkan daftar karakter jalur file yang tidak valid ke konsol. Meskipun kode mencoba menampilkan daftar semua karakter jalur file yang tidak valid, tidak semua karakter berada dalam kumpulan karakter yang dapat ditampilkan. Karena daftar karakter yang tidak valid dapat bervariasi berdasarkan sistem, output untuk kode ini juga dapat bervariasi.
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
Keterangan
BinaryReader tidak memulihkan posisi file setelah operasi baca yang gagal.
Untuk daftar tugas I/O umum, lihat Tugas I/O Umum.