关于Stream的Read方法

一次做到一个关于使用DataContractJsonSerializer类的表述。其中需要用到MemoryStream数组读取。发生数组溢出错误,这里特记录一笔:

public static class JsonSerializer<T> where T:new()
    {
        public static string Serialize(T obj)
        {
            string json = null;
            using (MemoryStream ms = new MemoryStream())
            {
                try
                {
                    DataContractJsonSerializer jsonS = new DataContractJsonSerializer(typeof(T));
                    jsonS.WriteObject(ms, obj);
                    ms.Position = 0;
                    // 总的要读入的字节数数组
                    byte[] bytes = new byte[ms.Length];
                    // 读取数据的起始点
                    int offset = 0;

                    // 判断起始点+偏移量的数据必须在数组总的范围内
                    while (offset+10<ms.Length)
                    {
                        // 尝试读取后10个数据
                        ms.Read(bytes, offset, 10);
                        // 起始点+10
                        offset += 10;
                    }

                    //剩余的数组全部读完
                    if (offset + 10 > ms.Length)
                    {
                        ms.Read(bytes, offset, (int)(ms.Length - offset));
                    }

                    json = Encoding.UTF8.GetString(bytes);
                }
                catch (Exception ex)
                {

                }
            }
            return json;
        }

        public static T Deserialize(string json)
        {
            T returnValue = default(T);

            using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
            {
                ms.Position = 0;
                DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(T));
                returnValue = (T)ds.ReadObject(ms);
            }
            return returnValue;
        }
    }
时间: 2024-10-01 11:27:09

关于Stream的Read方法的相关文章

Effective Java 第三版——47. 优先使用Collection而不是Stream来作为方法的返回类型

Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java

stream流及方法引用

Stream流 [只能使用一次,使用后就关闭了] 获取流的两种方式 1.所有Collection集合都可通过stream默认方式获取流 default Strea<E> stream () 2.Stream接口的静态方法of可以获取对应的流. static <T> Stream<T> of(T... values) [参数为可变参,就可以传递一个数组] 常用方法 延迟方法:返回值类型仍然是Stream接口自身类型的方法,所以支持链式调用 Filter[过滤]Stream

adodb.stream对象的方法/属性

Cancel 方法      使用方法如下      Object.Cancel      说明:取消执行挂起的异步 Execute 或 Open 方法的调用.Close   方法      使用方法如下      Object.Close      :关闭对像CopyTo 方法      使用方法如下      Object.CopyTo(destStream,[CharNumber])      说明:将对像的数据复制,destStream指向要复制的对像,CharNumber为可选参数,指

jxl读取excel文件异常:Unable to recognize OLE stream 的解决方法

问题成因 使用jxl方式读取,可能只能支持xls格式的文件,对于xlsx格式就不再支持 如果是从网站导出的excel文件,有的网站比较坑,导出的并不是标准格式的excel,而是将html改扩展名为xls的“伪”excel文件.当用excel打开这类文件时,会弹窗提示其“扩展名和文件类型不匹配”是否还要打开. 而且,使用文本编辑器打开,会发现这个所谓xls文件其实是xml标签的文件. 解决方法 在excel中打开,另存成xls就可以. 但当文件比较多时,可以使用excel vba批量另存. 第一种

C#语言中的XmlSerializer类的Serialize(Stream,Object)方法举例详解

在对象和 XML 文档之间进行序列化和反序列化操作. XmlSerializer 使您能够控制如何将对象编码为 XML. 命名空间:   System.Xml.Serialization程序集:  System.Xml(位于 System.Xml.dll) 下面举个例子说明: // This is the class that will be serialized. public class OrderedItem { public string ItemName; public string

在C#中如何使用资源的方法

总结一个在C#中如何使用资源的方法:一:使用本地文件1.将本地要加入的资源文本(视频,图片,文本或其它)加入项目,比如我们现在加入一个up.bmp的图片到项目中,且放在文件夹Resources下面,2.将up.bmp的生成操作设置为"嵌入的资源"3.读取资源:Assembly assembly = Assembly.GetEntryAssembly(); //不知为什么,上面的有时候不行,可以这样写: Assembly assembly = this.GetType().Assembl

Java8初体验(二)Stream语法详解

原文链接:http://ifeve.com/stream/ 1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and parallel aggregate operations. 我们来解读一下上面的那句话: Stream是元素的集合,这点让Stream看起来用些类似Iterator: 可以支持顺序和并行的对原Stream进行汇聚的操作: 大家可以把Stream当成一个高级版本的

&lt;JAVA8新增内容&gt;关于集合的操作(Collection/Iterator/Stream)

因为下文频繁使用lambda表达式,关于Java中的lambda表达式内容请见: http://www.cnblogs.com/guguli/p/4394676.html 一.使用增强的Iterator遍历集合元素 Iterator接口也是Java集合框架的成员,但它与Collection系列,Map系列的集合不一样:Collection系列集合,Map系列集合主要用于承装其他对象,而Iterator则主要用于遍历(即迭代访问)Collection集合中的元素,Iterator对象也被称为迭代器

[Java 8 Lambda] java.util.stream 简介

包结构如下所示: 这个包的结构很简单,类型也不多. BaseStream接口 所有Stream接口类型的父接口,它继承自AutoClosable接口,定义了一些所有Stream都具备的行为. 因为继承自AutoClosable接口,所以所有的Stream类型都可以用在Java 7中引入的try-with-resource机制中,以达到自动关闭资源的目的.实际上,只有当Stream是通过Socket,Files IO等方式创建的时候,才需要关闭它.对于来自于Collections,Arrays的S