Chapter 10 - Working with Files, Streams, and Serialization
What is the difference between using the
File
class and theFileInfo
class?The
File
class has static methods so it cannot be instantiated. It is best used for one-off tasks such as copying a file. TheFileInfo
class requires the instantiation of an object that represents a file. It is best used when you need to perform multiple operations on the same file.
What is the difference between the
ReadByte
method and theRead
method of a stream?The
ReadByte
method returns a single byte each time it is called and theRead
method fills a temporary array with bytes up to a specified length. It is generally best to useRead
to process blocks of bytes at once.
When would you use the
StringReader
,TextReader
, andStreamReader
classes?StringReader
is used for efficiently reading from a string stored in memoryTextReader
is an abstract class thatStringReader
andStreamReader
both inherit from for their shared functionalityStreamReader
is used for reading strings from a stream that can be any type of text file, including XML and JSON
What does the
DeflateStream
type do?DeflateStream
implements the same compression algorithm as GZIP but without a cyclical redundancy check, so although it produces smaller compressed files, it cannot perform integrity checks when decompressing.
How many bytes per character does the UTF-8 encoding use?
It depends on the character. Most Western alphabet characters are stored using a single byte. Other characters may need two or more bytes.
What is an object graph?
An object graph is any instance of classes in memory that reference each other, thereby forming a set of related objects. For example, a
Customer
object may have a property that references a set ofOrder
instances.
What is the best serialization format to choose for minimizing space requirements?
JavaScript Object Notation (JSON).
What is the best serialization format to choose for cross-platform compatibility?
eXtensible Markup Language (XML), although JSON is even better these days.