1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
private void SaveToFile(byte[] value,string filePath)
{
    System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.OpenOrCreate);
    fs.Write(value, 0, value.Length);
    fs.Flush();
    fs.Close();
}
 
private byte[] ConvertStreamToByteBuffer(string filePath)
{
    System.IO.Stream theStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
    int b1;
    System.IO.MemoryStream tempStream = new System.IO.MemoryStream();
    while ((b1 = theStream.ReadByte()) != -1)
    {
         tempStream.WriteByte(((byte)b1));
     }
    return tempStream.ToArray();
}        
public static byte[] GetsetBinary(DataTable dt)
{          
    byte[] bArrayResult = null; //用于存放序列化后的数据
    dt.RemotingFormat = SerializationFormat.Binary; //指定DataSet串行化格式是二进制
    MemoryStream ms = new MemoryStream();//定义内存流对象,用来存放DataSet序列化后的值
    IFormatter IF = new BinaryFormatter();//产生二进制序列化格式
    IF.Serialize(ms, dt);//串行化到内存中
    bArrayResult = ms.ToArray(); // 将DataSet转化成byte[]
    ms.Close();
    ms.Dispose();
    return bArrayResult;      
}      
public DataTable RetrieveDataSet(byte[] binaryData)
{          
    MemoryStream ms = new MemoryStream(binaryData);//创建内存流
    IFormatter bf = new BinaryFormatter();//产生二进制序列化格式
    object obj = bf.Deserialize(ms);//反串行化到内存中
    //类型检验
    ms.Close();
    if (obj is DataTable)
    {        
         DataTable dataSetResult = (DataTable)obj;
         return dataSetResult;
    }
    else
    {
          return null;
     }
}       
public static byte[] GetBytesByImage(System.Drawing.Image image)
{
     byte[] photo_byte = null;
     using (MemoryStream ms = new MemoryStream())
        {
            Bitmap bmp = new Bitmap(image);
            bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
            photo_byte = new byte[ms.Length];
            ms.Position = 0;
            ms.Read(photo_byte, 0, Convert.ToInt32(ms.Length));
            bmp.Dispose();
        }
 
    return photo_byte;
}           
 
//调用方法:
 
 
DataTable dt = DbHelperSQL.Query(sql);
DataTable newDt = dt.Clone();
newDt.Columns.Add("photo", System.Type.GetType("System.Byte[]"));
 foreach (DataRow dr in dt.Rows)
 {
       newDt.ImportRow(dr);
       System.Drawing.Image img = System.Drawing.Image.FromFile(StudentPhotoPath(dr["PhotoUrl"].ToString()));
       img = FixedSize(img, 135, 180);
       newDt.Rows[newDt.Rows.Count - 1]["photo"] = GetBytesByImage(img);
       img.Dispose();
}byte[] tableByteArray = GetsetBinary(newDt);
SaveToFile(tableByteArray, @"D:\hello.yzd");
byte[] byteArray = ConvertStreamToByteBuffer(@"D:\hello.yzd");
DataTable dt = RetrieveDataSet(byteArray);

DataTable保存与读取 stream的更多相关文章

  1. iOS 保存、读取与应用状态

    固化 对于大多数iOS应用,可以将其功能总结为:提供一套界面,帮助用户管理特定的数据.在这一过程中,不同类型的对象要各司其职:模型对象负责保存数据,视图对象负责显示数据,控制器对象负责在模型对象与视图 ...

  2. Protobuf for Python测试保存和读取文件

    安装pip, setuptools, and wheel 如果已经从python.org,安装啦Python 2 >=2.7.9 or Python 3 >=3.4 ,那么就已经有啦pip ...

  3. [MISS静IOS开发原创文摘]-AppDelegate存储全局变量和 NSUserDefaults standardUserDefaults 通过模型保存和读取数据,存储自定义的对象

    由于app开发的需求,需要从api接口获得json格式数据并保存临时的 app的主题颜色 和 相关url 方案有很多种: 1, 通过AppDelegate保存为全局变量,再获取 2,使用NSUSerD ...

  4. java如何操作注册表(Preferences类)(在windows的注册表中保存、读取)

    我们经常需要将我们的程序运行中的一些信息(比如在选项对话框中的设置)记录下来,以做便再次运行的时候不用再重写填写这些数据.这对改善软件的人机可用性方面是很有用的.比如:数据库监控.日志工具,JDBMo ...

  5. 【转】基本数据持久性(一) 使用plist保存和读取数据

    原文网址:http://www.it165.net/pro/html/201309/7170.html 想保存成绩.记录得分.保存账号密码等等?数据持久性可以做到这一点!这篇文章通过简单的程序,来分享 ...

  6. C# 保存和读取TreeView展开的状态

    附件 http://files.cnblogs.com/xe2011/ReadAndSaveTreeViewState.rar 保存和读取TreeView展开的状态  节点{ImageIndex,Is ...

  7. tensorflow:保存与读取网络结构,参数

    训练一个神经网络的目的是啥?不就是有朝一日让它有用武之地吗?可是,在别处使用训练好的网络,得先把网络的参数(就是那些variables)保存下来,怎么保存呢?其实,tensorflow已经给我们提供了 ...

  8. C# 结构体和List<T>类型数据转Json数据保存和读取

    C#  结构体和List<T>类型数据转Json数据保存和读取 一.结构体转Json public struct FaceLibrary { public string face_name ...

  9. 10 Tensorflow模型保存与读取

    我们的模型训练出来想给别人用,或者是我今天训练不完,明天想接着训练,怎么办?这就需要模型的保存与读取.看代码: import tensorflow as tf import numpy as np i ...

随机推荐

  1. 【CSS】使用浮动来创建拥有页眉、页脚、左侧目录和主体内容的首页

    有两种创建水平导航栏的方法.使用行内或浮动列表项. 如果您希望链接拥有相同的尺寸,就必须使用浮动方法. 1.构建水平导航栏的方法之一是将 <li> 元素规定为行内元素: display:i ...

  2. spring boot容器加载完后执行特定操作

    有时候我们需要在spring boot容器启动并加载完后,开一些线程或者一些程序来干某些事情.这时候我们需要配置ContextRefreshedEvent事件来实现我们要做的事情 1.Applicat ...

  3. 深入学习c++--重新审视auto

    1. auto推断变量类型 2. auto遍历 3. 自定义类可使用auto

  4. Eclipse常用快捷键(持续更新)

    编辑相关快捷键 Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率.Eclipse中有如下一些和编辑相关的快捷键. 1.[Ctrl+O] 显示类中方法和属性的大纲, ...

  5. PAT——1048. 数字加密

    本题要求实现一种数字加密方法.首先固定一个加密用正整数A,对任一正整数B,将其每1位数字与A的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对13取余——这里用J代表10.Q代表11.K代 ...

  6. loadrunner脚本中参数化和返回值输出log到外部文件

    loadrunner脚本中参数化和返回值输出log到外部文件 很多时候,我们在做性能测试之前,需要造数据,但是使用的这些参数化数据和生成的返回数据在后面的测试都会用的,所以我们需要在造数据过程中,将参 ...

  7. 快速排序及STL中的sort算法

    快速排序基本思想是,对待排序序列进行划分(Partition),一次划分,选择一个元素作为枢轴,然后将所有比枢轴小的元素放到枢轴的左边,将比枢轴大的元素放到枢轴的右边.然后对该枢轴划分的左右子序列分别 ...

  8. DPDK安装依赖项合集 环境合集

    前言 在dpdk编译过程中,由于一些依赖项的限制,dpdk在纯净的系统上安装需要花一些功夫.本文总结了编译dpdk所需的依赖项,并归纳了安装合集,在安装过程上可以省下大量的搜索时间. 使用系统 ubu ...

  9. 字符型设备驱动程序-first-printf以及点亮LED灯(三)

    根据  字符型设备驱动程序-first-printf以及点亮LED灯(二) 学习 修改函数 中的printf 为 printk. #include <linux/module.h> /* ...

  10. Web—12-详解CSS的相对定位和绝对定位

    CSS的相对定位和绝对定位通常情况下,我们元素的position属性的值默认为static 就是没有定位,元素出现在正常的文档流中,,这个时候你给这个元素设置的left,right,bottom,to ...