Stream 개체에 Value type 정보를 read/write할 수있는 Utility class
Serializable 객체를 사용하면 되겠지만, 지정된 Stream에 기록할 때 쓰는 고전적인 방법이다.
        public void Write_Read_ValueStream()
        {
            using (var ms = new ValueStream())
                using (var ms2 = new ValueStream()) {
                    var s = @"동해물과 백두산이";
                    var b = s.ToBytes();
                    ms.Write(s);
                    ms.Write(true);
                    ms.Write(1234);
                    ms.Write('x');
                    ms.Write(1245.567F);
                    ms.Write(999.99);
                    ms.Write(4444L);
                    ms.Write((short)127);
                    ms.Write(s.ToBytes());

                    ms.Position = 0;

                    Assert.AreEqual(ms.ReadString(), s);
                    Assert.AreEqual(ms.ReadBoolean(), true);
                    Assert.AreEqual(ms.ReadInt32(), 1234);
                    Assert.AreEqual(ms.ReadChar(), 'x');
                    Assert.AreEqual(ms.ReadFloat(), 1245.567F);
                    Assert.AreEqual(ms.ReadDouble(), 999.99);
                    Assert.AreEqual(ms.ReadInt64(), 4444L);
                    Assert.AreEqual(ms.ReadInt16(), 127);

                    Assert.AreEqual(ms.ReadBytes(b.Length).ToText(), s);

                    ms.Position = 0;

                    // ms 의 내용을 m2에 쓴다.
                    ms2.Write(ms);
                    ms2.Position = 0;

                    // m2 stream을 모두 복사해서 새로운 객체를 만든다.
                    var ms3 = (MemoryStream)ms2.ReadStream();
                    ms3.Position = 0;

                    Assert.AreEqual(StreamTool.ReadString(ms3), s);
                    Assert.AreEqual(StreamTool.ReadBoolean(ms3), true);
                    Assert.AreEqual(StreamTool.ReadInt32(ms3), 1234);
                    Assert.AreEqual(StreamTool.ReadChar(ms3), 'x');
                    Assert.AreEqual(StreamTool.ReadFloat(ms3), 1245.567F);
                    Assert.AreEqual(StreamTool.ReadDouble(ms3), 999.99);
                    Assert.AreEqual(StreamTool.ReadInt64(ms3), 4444L);
                    Assert.AreEqual(StreamTool.ReadInt16(ms3), 127);

                    Assert.AreEqual(StreamTool.ReadBytes(ms3, b.Length).ToText(), s);
                }
        }
Exemple #2
0
 /// <summary>
 /// 인스턴스에 <paramref name="v"/> 값 쓰기
 /// </summary>
 /// <param name="v">쓸 값</param>
 public void Write(float v)
 {
     StreamTool.Write(this, v);
 }
Exemple #3
0
 /// <summary>
 /// 인스턴스에 <paramref name="v"/> 값 쓰기
 /// </summary>
 /// <param name="v">쓸 값</param>
 public void Write(long v)
 {
     StreamTool.Write(this, v);
 }
Exemple #4
0
 /// <summary>
 /// 인스턴스에 <paramref name="s"/> 값 쓰기
 /// </summary>
 /// <param name="s">쓸 값</param>
 public void Write(string s)
 {
     StreamTool.Write(this, s);
 }
Exemple #5
0
 /// <summary>
 /// 스트림에서 현위치부터 <paramref name="length"/> 길이 만큼 읽어서 일차원 바이트 배열로 반환한다.
 /// </summary>
 /// <param name="length">읽을 길이</param>
 /// <returns>일차원 바이트 배열</returns>
 public byte[] ReadBytes(int length)
 {
     return(StreamTool.ReadBytes(this, length));
 }
Exemple #6
0
 /// <summary>
 /// 인스턴스에서 <see cref="char"/> 형식의 값 읽기
 /// </summary>
 /// <returns>읽은 값</returns>
 public char ReadChar()
 {
     return(StreamTool.ReadChar(this));
 }
Exemple #7
0
 /// <summary>
 /// 인스턴스에서 <see cref="float"/> 형식의 값 읽기
 /// </summary>
 /// <returns>읽은 값</returns>
 public float ReadFloat()
 {
     return(StreamTool.ReadFloat(this));
 }
Exemple #8
0
 public UInt32 ReadUInt32()
 {
     return(StreamTool.ReadUInt32(this));
 }
Exemple #9
0
 public void Read(out ushort v)
 {
     StreamTool.Read(this, out v);
 }
Exemple #10
0
 /// <summary>
 /// 인스턴스에서 값 읽기
 /// </summary>
 /// <param name="s">읽은 값</param>
 public void Read(out string s)
 {
     StreamTool.Read(this, out s);
 }
Exemple #11
0
 /// <summary>
 /// 인스턴스에 <paramref name="stream"/> 값 쓰기
 /// </summary>
 /// <param name="stream">쓸 값</param>
 public void Write(Stream stream)
 {
     StreamTool.Write(this, stream);
 }
Exemple #12
0
 /// <summary>
 /// 인스턴스에 <paramref name="v"/> 값 쓰기
 /// </summary>
 /// <param name="v">쓸 값</param>
 public void Write(byte[] v)
 {
     StreamTool.Write(this, v);
 }
Exemple #13
0
 /// <summary>
 /// 인스턴스에 <paramref name="v"/> 값 쓰기
 /// </summary>
 /// <param name="v">쓸 값</param>
 public void Write(char v)
 {
     StreamTool.Write(this, v);
 }
Exemple #14
0
 /// <summary>
 /// 인스턴스에 <paramref name="v"/> 값 쓰기
 /// </summary>
 /// <param name="v">쓸 값</param>
 public void Write(bool v)
 {
     StreamTool.Write(this, v);
 }
Exemple #15
0
 /// <summary>
 /// 인스턴스에 <paramref name="v"/> 값 쓰기
 /// </summary>
 /// <param name="v">쓸 값</param>
 public void Write(double v)
 {
     StreamTool.Write(this, v);
 }
Exemple #16
0
 /// <summary>
 /// 인스턴스에서 문자열 읽기
 /// </summary>
 /// <returns>읽은 문자열</returns>
 public string ReadString()
 {
     return(StreamTool.ReadString(this));
 }
Exemple #17
0
 public UInt16 ReadUInt16()
 {
     return(StreamTool.ReadUInt16(this));
 }
Exemple #18
0
 public void Read(out ulong v)
 {
     StreamTool.Read(this, out v);
 }
Exemple #19
0
 public UInt64 ReadUInt64()
 {
     return(StreamTool.ReadUInt64(this));
 }
Exemple #20
0
 /// <summary>
 /// 인스턴스에서 값 읽기
 /// </summary>
 /// <param name="v">읽은 값</param>
 public void Read(out float v)
 {
     StreamTool.Read(this, out v);
 }
Exemple #21
0
 /// <summary>
 /// 인스턴스에서 <see cref="double"/> 형식의 값 읽기
 /// </summary>
 /// <returns>읽은 값</returns>
 public double ReadDouble()
 {
     return(StreamTool.ReadDouble(this));
 }
Exemple #22
0
 /// <summary>
 /// 인스턴스에서 값 읽기
 /// </summary>
 /// <param name="v">읽은 값</param>
 public void Read(out double v)
 {
     StreamTool.Read(this, out v);
 }
Exemple #23
0
 /// <summary>
 /// 인스턴스에서 <see cref="System.Boolean"/> 형식의 값 읽기
 /// </summary>
 /// <returns>읽은 값</returns>
 public bool ReadBoolean()
 {
     return(StreamTool.ReadBoolean(this));
 }
Exemple #24
0
 /// <summary>
 /// 인스턴스에서 값 읽기
 /// </summary>
 /// <param name="v">읽은 값</param>
 public void Read(out bool v)
 {
     StreamTool.Read(this, out v);
 }
Exemple #25
0
 /// <summary>
 /// 인스턴스의 현재 <see cref="Stream.Position"/>에서부터 끝까지 읽어서 <see cref="Stream"/>으로 반환한다.
 /// </summary>
 /// <returns>읽은 <see cref="Stream"/> 인스턴스</returns>
 public Stream ReadStream()
 {
     return(StreamTool.ReadStream(this));
 }
Exemple #26
0
 /// <summary>
 /// 인스턴스에서 값 읽기
 /// </summary>
 /// <param name="v">읽은 값</param>
 public void Read(out char v)
 {
     StreamTool.Read(this, out v);
 }
Exemple #27
0
 /// <summary>
 /// 인스턴스에 <paramref name="v"/> 값 쓰기
 /// </summary>
 /// <param name="v">쓸 값</param>
 public void Write(int v)
 {
     StreamTool.Write(this, v);
 }
Exemple #28
0
 /// <summary>
 /// 인스턴스에서 값 읽기
 /// </summary>
 /// <param name="v">읽은 값</param>
 public void Read(byte[] v)
 {
     StreamTool.Read(this, v);
 }
Exemple #29
0
 public void Write(ushort v)
 {
     StreamTool.Write(this, v);
 }
Exemple #30
0
 /// <summary>
 /// 인스턴스에서 값 읽기
 /// </summary>
 /// <param name="stream">읽은 값</param>
 public void Read(out Stream stream)
 {
     StreamTool.Read(this, out stream);
 }