The topic you requested is included in another documentation set. For convenience, it's displayed below. Choose Switch to see the topic in its original location.
DataWriter class
Writes data to an output stream.
Syntax
public ref class DataWriter sealed : IDataWriter, IClosable
Attributes
- [MarshalingBehavior(Agile)]
- [Threading(Both)]
- [Version(0x06020000)]
Members
The DataWriter class has these types of members:
Constructors
The DataWriter class has these constructors.
Constructor | Description |
---|---|
DataWriter() | Creates and initializes a new instance of the data writer. |
DataWriter(IOutputStream) | Creates and initializes a new instance of the data writer to an output stream. |
Methods
The DataWriter class has these methods. With C#, Visual Basic, and C++, it also inherits methods from the Object class.
Method | Description |
---|---|
Close [C++, JavaScript] | Closes the current stream and releases system resources. |
DetachBuffer | Detaches the buffer that is associated with the data writer. |
DetachStream | Detaches the stream that is associated with the data writer. |
Dispose [C#, VB] | Performs tasks associated with freeing, releasing, or resetting unmanaged resources. |
FlushAsync | Flushes data asynchronously. |
MeasureString | Gets the size of a string. |
StoreAsync | Commits data in the buffer to a backing store. |
WriteBoolean | Writes a Boolean value to the output stream. |
WriteBuffer(IBuffer) | Writes the contents of the specified buffer to the output stream. |
WriteBuffer(IBuffer, UInt32, UInt32) | Writes the specified bytes from a buffer to the output stream. |
WriteByte | Writes a byte value to the output stream. |
WriteBytes | Writes an array of byte values to the output stream. |
WriteDateTime | Writes a date and time value to the output stream. |
WriteDouble | Writes a floating-point value to the output stream. |
WriteGuid | Writes a GUID value to the output stream. |
WriteInt16 | Writes a 16-bit integer value to the output stream. |
WriteInt32 | Writes a 32-bit integer value to the output stream. |
WriteInt64 | Writes a 64-bit integer value to the output stream. |
WriteSingle | Writes a floating-point value to the output stream. |
WriteString | Writes a string value to the output stream. |
WriteTimeSpan | Writes a time-interval value to the output stream. |
WriteUInt16 | Writes a 16-bit unsigned integer value to the output stream. |
WriteUInt32 | Writes a 32-bit unsigned integer value to the output stream. |
WriteUInt64 | Writes a 64-bit unsigned integer value to the output stream. |
Properties
The DataWriter class has these properties.
Property | Access type | Description |
---|---|---|
Read/write | Gets or sets the byte order of the data in the output stream. | |
Read/write | Gets or sets the Unicode character encoding for the output stream. | |
Read-only | Gets the size of the buffer that has not been used. |
Examples
The following example shows how to write and read strings to an in-memory stream. For the full code sample, see Reading and writing data sample.
#include "pch.h" #include "WriteReadStream.xaml.h" using namespace Concurrency; using namespace DataReaderWriter; using namespace Platform; using namespace Windows::Storage::Streams; using namespace Windows::UI::Xaml; using namespace Windows::UI::Xaml::Controls; using namespace Windows::UI::Xaml::Navigation; Array<String^>^ _inputElements = ref new Array<String^> { "Hello", "World", "1 2 3 4 5", "Très bien!", "Goodbye" }; WriteReadStream::WriteReadStream() { InitializeComponent(); // Populate the text block with the input elements. ElementsToWrite->Text = ""; for (unsigned int i = 0; i < _inputElements->Length; i++) { ElementsToWrite->Text += _inputElements[i] + ";"; } } // Invoked when this page is about to be displayed in a Frame. void WriteReadStream::OnNavigatedTo(NavigationEventArgs^ e) { // Get a pointer to our main page. rootPage = MainPage::Current; } // This is the click handler for the 'Copy Strings' button. Here we will parse the // strings contained in the ElementsToWrite text block, write them to a stream using // DataWriter, retrieve them using DataReader, and output the results in the // ElementsRead text block. void DataReaderWriter::WriteReadStream::TransferData( Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) { // Initialize the in-memory stream where data will be stored. InMemoryRandomAccessStream^ stream = ref new InMemoryRandomAccessStream(); // Create the DataWriter object backed by the in-memory stream. When // dataWriter is deleted, it will also close the underlying stream. DataWriter^ dataWriter = ref new DataWriter(stream); dataWriter->UnicodeEncoding = UnicodeEncoding::Utf8; dataWriter->ByteOrder = ByteOrder::LittleEndian; // Create the data reader by using the input stream set at position 0 so that // the stream will be read from the beginning regardless of where the position // the original stream ends up in after the store. IInputStream^ inputStream = stream->GetInputStreamAt(0); DataReader^ dataReader = ref new DataReader(inputStream); // The encoding and byte order need to match the settings of the writer / we previously used. dataReader->UnicodeEncoding = UnicodeEncoding::Utf8; dataReader->ByteOrder = ByteOrder::LittleEndian; // Write the input data to the output stream. Serialize the elements by writing // each string separately, preceded by its length. for (unsigned int i = 0; i < _inputElements->Length; i++) { unsigned int inputElementSize = dataWriter->MeasureString(_inputElements[i]); dataWriter->WriteUInt32(inputElementSize); dataWriter->WriteString(_inputElements[i]); } // Send the contents of the writer to the backing stream. create_task(dataWriter->StoreAsync()).then([this, dataWriter] (unsigned int bytesStored) { // For the in-memory stream implementation we are using, the FlushAsync() call // is superfluous, but other types of streams may require it. return dataWriter->FlushAsync(); }).then([this, dataReader, stream] (bool flushOp) { // Once we have written the contents successfully we load the stream. return dataReader->LoadAsync((unsigned int) stream->Size); }).then([this, dataReader] (task<unsigned int> bytesLoaded) { try { // Check for possible exceptions that could have been thrown // in the async call chain. bytesLoaded.get(); String^ readFromStream = ""; // Keep reading until we consume the complete stream. while (dataReader->UnconsumedBufferLength > 0) { // Note that the call to ReadString requires a length of // "code units" to read. This is the reason each string is // preceded by its length when "on the wire". unsigned int bytesToRead = dataReader->ReadUInt32(); readFromStream += dataReader->ReadString(bytesToRead) + "\n"; } // Populate the ElementsRead text block with the items we read from the stream ElementsRead->Text = readFromStream; } catch (Exception^ e) { ElementsRead->Text = "Error: " + e->Message; } }); }
Requirements
Minimum supported client | Windows 8 [Windows Store apps only] |
---|---|
Minimum supported server | Windows Server 2012 [Windows Store apps only] |
Minimum supported phone | Windows Phone 8 |
Namespace |
|
Metadata |
|
See also
Show: