WinRT中读取基础数据类型

可以用Windows.Storage.Streams.DataWriter 和 Windows.Storage.Streams.DataReader 类

DataWriter类如下:

public sealed class DataWriter : IDataWriter, IDisposable {
// Constructs a DataWriter over a growable buffer (see DetachBuffer below)
public DataWriter();
// Constructs a DataWriter over an output stream and a growable buffer
public DataWriter(IOutputStream outputStream);
// All WriteXxx methods append data to the buffer (growing it if necessary)
public void WriteBoolean(Boolean value);
public void WriteByte(Byte value);
public void WriteBytes(Byte[] value);
public void WriteBuffer(IBuffer buffer);
public void WriteBuffer(IBuffer buffer, UInt32 start, UInt32 count);
public void WriteInt16(Int16 value);
public void WriteUInt16(UInt16 value);
public void WriteInt32(Int32 value);
public void WriteUInt32(UInt32 value);
public void WriteInt64(Int64 value);
public void WriteUInt64(UInt64 value);
public void WriteSingle(Single value);
public void WriteDouble(Double value);
public void WriteGuid(Guid value);
public void WriteDateTime(DateTimeOffset value);
public void WriteTimeSpan(TimeSpan value);
// For WriteXxx methods, indicates how bytes append to buffer (big/little endian)
public ByteOrder ByteOrder { get; set; } // Default=BigEndian
// Strings are encoded via UnicodeEncoding (Utf8, Utf16LE, or Utf16BE) instead of ByteOrder
public UnicodeEncoding UnicodeEncoding { get; set; } // Default=Utf8
// Returns how many bytes a string requires when encoded via UnicodeEncoding
public UInt32 MeasureString(String value);
// Appends the encoded string's bytes to the buffer
public UInt32 WriteString(String value);
// Returns the current size of the buffer
public UInt32 UnstoredBufferLength { get; }
// Writes the buffer to the underlying stream & clears the internal buffer
public DataWriterStoreOperation StoreAsync();
// Returns the buffer the DataWriter was using and associates a new empty buffer with it
public IBuffer DetachBuffer();
// Disassociates stream; stream will NOT be closed when Dispose is called
public IOutputStream DetachStream();
// Closes stream (if not detached); does NOT call StoreAsync
public void Dispose();
// Calls FlushAsync on underlying stream
public IAsyncOperation<Boolean> FlushAsync();
}

注意:只有XxxAsync执行IO操作,WriteXxx并不执行IO,而只是把字节送进内存的Buffer,必须定期调用StoreAsync让buffer写进下层的流,如果不调用StoreAsync就调用Dispose的话,内存中的buffer不会写入下层的流,会被扔掉。因为Dispose不是异步方法,不执行IO操作。

下面是DataWriter的例子:

private async void DataWriterSample(StorageFile file) {
using (var dw = new DataWriter(await file.OpenAsync(FileAccessMode.ReadWrite))) {
dw.WriteBytes(new Byte[] { 1, 2, 3, 4, 5 });
const String text = "Some text";
// Store the string length first followed by the string so we can read it back later
UInt32 encodedStringLength = dw.MeasureString(text);
dw.WriteUInt32(encodedStringLength);
dw.WriteString(text);
UInt32 bytesStored = await dw.StoreAsync(); // Commit buffer to stream
} // Close DataWriter & underlying stream
}

下面是DataReader的例子:

public sealed class DataReader : IDataReader, IDisposable {
// Constructs a DataReader over an existing buffer instead of loading a buffer from a stream
public static DataReader FromBuffer(IBuffer buffer);
// Constructs a DataReader over an input stream and a growable buffer
public DataReader(IInputStream inputStream);
// Reads count bytes from stream appending them to buffer
public DataReaderLoadOperation LoadAsync(UInt32 count);
// Indicates whether LoadAsync can prefetch more bytes than requested to by 'count'
public InputStreamOptions InputStreamOptions { get; set; }
// Returns number of bytes in buffer yet to be read
public UInt32 UnconsumedBufferLength { get; }
// All ReadXxx methods read data from buffer (throwing Exception if buffer is empty)
public Boolean ReadBoolean();
public Byte ReadByte();
public void ReadBytes(Byte[] value);
public IBuffer ReadBuffer(UInt32 length);
public Int16 ReadInt16();
public UInt16 ReadUInt16();
public Int32 ReadInt32();
public UInt32 ReadUInt32();
public Int64 ReadInt64();
public UInt64 ReadUInt64();
public Single ReadSingle();
public Double ReadDouble();
public Guid ReadGuid();
public DateTimeOffset ReadDateTime();
public TimeSpan ReadTimeSpan();
// For ReadXxx methods, indicates how bytes get read from the buffer (big/little endian)
public ByteOrder ByteOrder { get; set; } // Default=BigEndian
// Strings are decoded via UnicodeEncoding (Utf8, Utf16LE, or Utf16BE) instead of ByteOrder
public UnicodeEncoding UnicodeEncoding { get; set; } // Default=Utf8
// Decodes codeUnitCount bytes from the buffer to a string via UnicodeEncoding
public String ReadString(UInt32 codeUnitCount);
// Returns the buffer the DataReader was using and associates a new empty buffer with it
public IBuffer DetachBuffer();
// Disassociates stream; stream will NOT be closed when Dispose is called
public IInputStream DetachStream();
// Closes stream (if not detached)
public void Dispose();
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值