本文整理汇总了C#中MutableString.SwitchToBytes方法的典型用法代码示例。如果您正苦于以下问题:C# MutableString.SwitchToBytes方法的具体用法?C# MutableString.SwitchToBytes怎么用?C# MutableString.SwitchToBytes使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MutableString
的用法示例。
在下文中一共展示了MutableString.SwitchToBytes方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: AppendBytes
// count == Int32.MaxValue means means no bound
public int AppendBytes(MutableString/*!*/ buffer, int count, bool preserveEndOfLines) {
ContractUtils.RequiresNotNull(buffer, "buffer");
ContractUtils.Requires(count >= 0, "count");
if (count == 0) {
return 0;
}
bool readAll = count == Int32.MaxValue;
buffer.SwitchToBytes();
int initialBufferSize = buffer.GetByteCount();
if (preserveEndOfLines) {
AppendRawBytes(buffer, count);
} else {
// allocate 3 more bytes at the end for a backstop and possible LF:
byte[] bytes = Utils.EmptyBytes;
int done = initialBufferSize;
bool eof;
do {
AppendRawBytes(buffer, readAll ? 1024 : count);
int end = buffer.GetByteCount();
int bytesRead = end - done;
if (bytesRead == 0) {
break;
}
eof = bytesRead < count;
buffer.EnsureCapacity(end + 3);
bytes = buffer.GetByteArray();
if (bytes[end - 1] == CR && PeekByte(0) == LF) {
ReadByte();
bytes[end++] = LF;
}
// insert backstop:
bytes[end] = CR;
bytes[end + 1] = LF;
int last = IndexOfCrLf(bytes, done);
count -= last - done;
done = last;
while (last < end) {
int next = IndexOfCrLf(bytes, last + 2);
int chunk = next - last - 1;
Buffer.BlockCopy(bytes, last + 1, bytes, done, chunk);
done += chunk;
count -= chunk;
last = next;
}
buffer.Remove(done);
} while (readAll || count > 0 && !eof);
}
if (readAll) {
buffer.TrimExcess();
}
return buffer.GetByteCount() - initialBufferSize;
}
示例2: WriteBytes
public int WriteBytes(MutableString/*!*/ buffer, int offset, int count, bool preserveEndOfLines) {
// TODO: this is not safe, we are passing an internal pointer to the byte[] content of MutableString to the Stream:
return WriteBytes(buffer.SwitchToBytes().GetByteArray(), offset, count, preserveEndOfLines);
}