ticket。
Converting a Binary Stream into a Text Stream
Converting a binary stream into a text stream involves using the …provided formatter to
create a Ticket instance that is then converted into text。 The following is the plete source
code (you’ll need a reference to LottoLibrary in Binary2Text)。
Imports System。IO
Imports System。Runtime。Serialization。Formatters。Binary
Public Class LottoTicketProcessor : Implements IBinary2TextProcessor
Public Sub Process(ByVal input As Stream; ByVal output As TextWriter) _
Implements IBinary2TextProcessor。Process
Dim builder As StringBuilder = New StringBuilder()
Try
Do While True
Dim formatter As BinaryFormatter = New BinaryFormatter()
Dim ticket As LottoLibrary。Ticket = _
DirectCast(formatter。Deserialize(input);
LottoLibrary。Ticket)
…………………………………………………………Page 298……………………………………………………………
276 CH AP T E R 1 0 ■ L E A R N I N G A B OU T P E R S IS TE N CE
builder。AppendFormat( _
〃{0}。{1}。{2} {3} {4} {5} {6} {7} {8} {9} {10}〃;
ticket。DrawDate。Year;
ticket。DrawDate。Month;
ticket。DrawDate。Day;
ticket。Numbers(0);
ticket。Numbers(1);
ticket。Numbers(2);
ticket。Numbers(3);
ticket。Numbers(4);
ticket。Numbers(5);
ticket。Bonus;
ControlChars。NewLine)
Loop
Catch e As Exception
End Try
output。Write(builder。ToString())
End Sub
End Class
In the code; a binary stream is read using the BinaryFormatter class; which reads the data
for an object from the data stream。 Notice how the method Deserialize() does not ask which
type to read。 This is because all of that information is saved in the stream。 Deserialize() will
read data from the stream; associate the data with a type; instantiate it; and populate the data
members。
The bolded code in the preceding listing points out where deserialization bees tricky;
which centers around when to read what type。 A binary stream when processed by the
BinaryFormatter will read and write objects。 BinaryFormatter will instantiate whatever it encoun
ters and assumes that the caller of BinaryFormatter knows which type is being manipulated。 If
the caller does not know this; an exception will occur because the type cast to the specific type
will fail。
The exception block is necessary because you don’t know how many Ticket objects have
been saved; as the count has not been saved to the stream。 provides the Position and
Length properties to determine if any instances are left to be read; but those properties work
only with files。 If the binary stream being read is a console data stream; there is no length or
position。 Thus; the only real solution is to keep reading until you can’t do so anymore and
assume processing is plete。
INTENTION AND IMPLEMENTATION
The fact that Position and Length have different behaviors depending on the implementation might seem
to break the contract of being able to separate intention from implementation。 It seems to break the po
nent software paradigm because; as a developer; you do need to know about the stream implementation。 The
rule has not been broken; but been put on hold; because sometimes you are left with no other option。 A file
stream and console stream share many characteristics; but knowing the length is not one of them。 A programmer
could force the console stream to give back some value; but that would be incorrect。 The smarter approach;
and the one chosen by the implementers; is to generate an exception。
…………………………………………………………Page 299……………………………………………………………
CH A PT E R 1 0 ■ L E A R N I N G A B O U T P E R S IS T E N CE 277
The binary stream formatter can bee even pickier。 Look at Figure 10…8 again and notice how the
type information with version identifiers is stored in the stream。 Imagine the situation where you create an
assembly that saves some objects。 Then x years and n versions of the program later; you try to load the file。
You can’t; because the version of the type does not exist。 It is smart for the binary formatter to not instantiate
a version of a type that does not exist; because otherwise there could be serialization failures。
Tweaking Serialization
When dealing with serialization; you may e across a particular text or binary format that
will require some extra work。 Also; you may have some objects that you want to exclude from
serialization。
Performing Custom Serialization
Sometimes I think there are as many file formats as there are grains of sand on a beach。 As just
two examples; specializations of text formats are XML and JSON (for JavaScript Object Notation;
used in JavaScript for your web browser)。 In most cases; the default serializations will work。
However; you may need to tweak a particular serialization。
Many serialization techniques allow custom serializations of a particular object。 The default
serialization implies a certain marshaling。 For example; it might
小说推荐
- oracle从入门到精通(PDF格式)
- -Page 1-Oracle 从入门到精通-Page 2-资源来自网络,仅供学习 Oracle 从入门到精通一、SQL 8
- 最新章:第37章
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 最新章:第4章
- Java编程思想第4版[中文版](PDF格式)
- -Page 1-Page 2《Thinking In Java》中文版作者:Bruce Eckel主页:http/BruceEckel.编译:Trans Bot主页:http/memberease~transbot致谢-献给那些直到现在仍在孜孜不倦创造下一代计算机语言的人们!指导您利用万维网的语言进
- 最新章:第295章
- 深入浅出MFC第2版(PDF格式)
- -Page 1-Page 2-山高月小山高月小 水落石出水落石出山高月小山高月小 水落石出水落石出-Page 3-深入淺出MFC(第版 使用Visual C 5.0 MFC 4.2)Dissecting MFC(Second Edition Using Visual C 5.0 MFC 4.2)侯俊
- 最新章:第309章
- VC语言6.0程序设计从入门到精通
- -Page 1-Visual C 6.0 程序设计从入门到精通求是科技 王正军 编著
- 最新章:第136章
- SQL 21日自学通(V3.0)(PDF格式)
- -Page 1-SQL 21 日自学通(V1.0 翻译人 笨猪目录目录 1译者的话 14第一周概貌 16从这里开始 16
- 最新章:第170章
- 2008年青年文摘精编版
- 作者:中国青年出版社“初恋”的惩罚.作者:凡 凡 文章来源《真情》2005年第4期 点击数:6608 更新时间:2005-6-5过了年,我就十八岁了。离高考只剩下四个多月了。这一段,班里的男女生相互间递纸条、写情书、约会等地下活动慢慢的多了起来。我这个“尖子生”也突然感到了不安、慌乱,并且自责。不知
- 最新章:第230章
- JMS简明教程(PDF格式)
- -Page 1-JMS1.1规范中文版卫建军2007‐11‐22-Page 2
- 最新章:第28章
- SQL语言艺术(PDF格式)
- -Page 1-SQLSSQQLL语言艺术内容介绍本书分为12章,每一章包含许多原则或准则,并通过举例的方式对原则进行解释说明。这些例子大多来自于实际案例,对九种SQL经典查询场景以及其性能影响讨论,非常便于实践,为你数据库应用维护人员阅读。资深 SQL 专家 Stéphane Faroult倾力打
- 最新章:第27章