.NET基础加强第七课--文件流

news2024/11/19 8:46:48

序列化

JSON序列化

例子

using Nancy.Json;

Person p1 = new Person();
p1.Name = “zs”;

// json 序列化
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
string json = javaScriptSerializer.Serialize(p1);
Console.WriteLine(json);
Console.ReadKey();

public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}

注意:

1, 序列化只把对象的存储格式改变了,对象的实际存储内容不变
2,序列化只序列化数据 (例如:字段的值,属性的值)

二进制序列化注意

1, 被序列化的对象必须标记为可序列化
加Serializable
2, 被序列化的所有父类都必须标记为可序列化
二进制序列化是把对象变成流的过程,就是把对象变成byte[]
序列化后,保存到磁盘上,操作磁盘的文件需要文件流 FileStream
3, 要求被 序列化的对象的类型中的所有字段 的类型也必须标记为"可序列化"

例子

//1, 创建序列化器
BinaryFormatter binaryFormatter = new BinaryFormatter();
// 创建文件流
using(FileStream fs = new FileStream(“Person.bf”, FileMode.Create))
{
//开始序列化
binaryFormatter.Serialize(fs, p1);
}

Console.WriteLine(“序列化OK”);

Console.ReadKey();

[Serializable]
public class Person:Animal
{
public int Id { get; set; }

[NonSerialized]
private string _name;
public string Name 
{ get { return _name; } set { _name = value; } 
   }
public int Age { get; set; }

public Car BM { get; set; }

}

[Serializable]
public class Animal
{
public void Move()
{
Console.WriteLine(“会动”);
}
}

[Serializable]
public class Car
{

}

反序列化

using System.Runtime.Serialization.Formatters.Binary;

BinaryFormatter binaryFormatter = new BinaryFormatter();

using(FileStream fs = new FileStream(“Person.bf”, FileMode.Open))
{
object obj = binaryFormatter.Deserialize(fs);
Person person = obj as Person;
Console.WriteLine(person.Age);
Console.WriteLine(person.Name);

}

Console.WriteLine(“反序列化成功!”);

Console.ReadKey();

注意

序列化时不建议使用自动属性

文件管理实例

显示资料夹文件
代码:
string path = @“D:\MVC\MVCDemo”;
LoadDate(path, treeView1.Nodes);
private void LoadDate(string path, TreeNodeCollection nodes)
{
// 获取path 下的所有文件夹
string[] dirs = Directory.GetDirectories(path);
foreach (string dir in dirs)
{
TreeNode tnode = nodes.Add(dir);
LoadDate(dir, tnode.Nodes);
}
// 获取path 下的所有文本文件
string[] files = Directory.GetFiles(path, “*.txt”);
foreach (string file in files)
{
TreeNode node = nodes.Add(Path.GetFileName(file));
node.Tag = file;

        }
    }

字符集

using System.Text;

EncodingInfo[] infos = Encoding.GetEncodings();
foreach (var item in infos)
{
Console.WriteLine($“{item.CodePage}—{item.DisplayName}----{item.Name}”);
}

Console.ReadKey();

例子:大文件拷贝
string source = @“D:\迅雷下载\囧妈.mp4”;
string target = @“D:\迅雷下载\new\囧妈.mp4”;

BigFileCopy(source, target);

void BigFileCopy(string source, string target)
{
// 创建 一个读取源文件
using (FileStream fs = new FileStream(source, FileMode.Open, FileAccess.Read))
{
// 创建一个写入新文件
using (FileStream sr = new FileStream(target, FileMode.Create, FileAccess.Write))
{
// 缓存区
byte[] bytes = new byte[1024 * 1024 * 5];
// 返回值表示本次实际读的字节个数
int r = fs.Read(bytes, 0, bytes.Length);
while (r > 0)
{
sr.Write(bytes, 0, r);
Console.WriteLine(Math.Round((decimal)sr.Position / fs.Length, 2) * 100);
r = fs.Read(bytes, 0, bytes.Length);

        }
        // 将读取的内容写到新文件 中


    }
}

}

StreamReader 操作

using (StreamReader reader = new StreamReader(@“1.txt”, Encoding.Default))
{
//StreamReader是按行读文本文件
string line = null;

//while (!reader.EndOfStream)
//{
//    line = reader.ReadLine();
//}

while ((line = reader.ReadLine()) != null)
{
    Console.WriteLine(line);
}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/419081.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux-创建子进程的过程与原理(fork讲解)

我们知道,子进程可以被命令行创建,被fork函数创建,但是子进程创建了什么呢,是完全拷贝父进程函数?还是继承父进程数据呢? 首先我们要知道,进程的构成:进程内核数据结构可运行程序载…

二维差分【算法推导,图文讲解清晰】

798. 差分矩阵 - AcWing题库 算法推导 二维差分相对一维差分会复杂一点,而且还要结合二维前缀和的一些细节处理 A、B数组角色问题 在差分思想中,构造并不是那么重要,而是其中A、B数组的角色。 我们假想存在一个数组B,输入的A…

论文阅读《NeRF-Supervised Deep Stereo》

论文地址:https://arxiv.org/pdf/2303.17603.pdf 源码地址:https://nerfstereo.github.io/ 概述 针对深度估计的标签数据难以获取,自监督方法在病态(遮挡、非朗伯面)区域的表现差,跨域泛化能力弱的问题&…

【jvm系列-06】深入理解对象的实例化、内存布局和访问定位

JVM系列整体栏目 内容链接地址【一】初识虚拟机与java虚拟机https://blog.csdn.net/zhenghuishengq/article/details/129544460【二】jvm的类加载子系统以及jclasslib的基本使用https://blog.csdn.net/zhenghuishengq/article/details/129610963【三】运行时私有区域之虚拟机栈…

Vue——组件基础

目录 定义一个组件​ 使用组件​ 传递 props​ 监听事件​ 通过插槽来分配内容​ 动态组件​ DOM 模板解析注意事项​ 大小写区分​ 闭合标签​ 元素位置限制​ 组件允许我们将 UI 划分为独立的、可重用的部分,并且可以对每个部分进行单独的思考。在实际应…

Learning to summarize from human feedback导读(1)

总结: (1)生成摘要等模型,虽然有评估方法,但是人类总结的质量依旧难以相比 总结: (1)在各种NLP任务中,大规模语言模型的预训练以及取得了很高的性能 (2&am…

PHP快速入门09-正则相关,附一定要学会的20个高频使用案例

文章目录前言一、正则表达式介绍二、正则高频案例20个2.1 检查字符串是否以字母开头2.2 检查字符串是否以数字开头2.3 检查字符串是否包含特定字符2.4 检查字符串是否以特定字符结尾2.5 检查字符串是否为纯数字2.6 检查字符串是否为纯字母2.7 检查字符串是否为有效的电子邮件地…

Bean对象的作用域和生命周期

文章目录:一.Bean的作用域 (1)Bean作用域的含义 (2)Bean的6种作用域 二.Bean的生命周期(1)开辟内存空间 (2) 属性注入 (3)初始化 (4)使用Bean (…

【CSDN|每日一练】运输石油

目录 运行结果题目描述输入描述:输出描述:示例代码结语运行结果 题目描述 某石油公司需要向A、B两地运输石油。 两地的需求量不同,而一辆车只能装载一定量的石油。 经过计算A地需要a辆车,B地需要b辆车运输才能满足需求。 现在一共有n辆车分布在各地,每辆车前往A、B两地…

HFSS一些使用技巧总结

1. 快捷键: CTRLH,隐藏选择的object、face 字母E,选择edge(线) alt左键双击九个区域,切换9个不同的视角(与789组合使用) 2. 复制: 这样的复制好处在于:复制完的物体相…

使用Excel打造一款个人日志系统

写在前面 我很多年前看过晨间日志的奇迹这一本书,我深受启发,这本书的中心思想就是通过九宫格的方式写连体日志,自己可以方便查找而有而且有激情去完成这个日志,书中推荐的方法是使用excel写日志。但是自己总感觉用excel过于麻烦…

Java 源码中的 <? extends U>与 <? super L>是什么?

目录 ? extends U ? super L 总结一下: ? extends U 其中extends意思为:扩大;扩展;延长,?我们可以把他看作一个通配符,匹配所有的接口,U就一个泛型占位符,所以连在一起可联想到,从U…

前后端分离下的-SpringSecurity

前后端分离下的SpringSecurity 项目创建 使用SpringBoot初始化器创建SpringBoot项目 修改项目依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2…

电容笔和Apple pencil的区别是什么?好用电容笔推荐

Apple Pencil与目前市场上常见的电容笔最大的不同之处在于&#xff0c;普通电容笔并不具备苹果Pencil特有的重力压感&#xff0c;而仅仅是一种倾斜的压感。不过&#xff0c;其在其它方面的表现也很出色&#xff0c;与Apple Pencil相似&#xff0c;而且价格仅为200元。现在&…

项目管理中的冲突是什么?

项目管理中的冲突可以采取多种不同的形式。团队成员在创意愿景上存在分歧&#xff0c;与高层管理人员就期望和时间表发生争执&#xff0c;甚至与第三方供应商发生争执&#xff0c;都是项目冲突的主要例子。 冲突的常见原因是什么&#xff1f; 基于项目的组织内部冲突的典型原因…

【记录】Git连接gitee、新建仓库

学习记录1.连接gitee2.新建仓库1.连接gitee https://www.cnblogs.com/cokefentas/p/14727592.html git安装与卸载 apt-get install git apt-get remove gitgit配置 配置用户名 git config --global user.name "your name" 配置邮箱 git config --global user.email…

2023都说测试行业饱和了,为什么我们公司新招的的测试开了15K?

其实每年都有人说测试行业饱和了&#xff0c;但依旧有很多人找到了薪资不错的工作。来说说我的看法吧&#xff0c;我认为不用担心测试会饱和的问题&#xff0c;我们人口基数大&#xff0c;任何一个行业都有竞争&#xff0c;这是非常正常的情况。而且在有技术能力的人面前永远没…

Vue3通透教程【十一】初探TypeScript

文章目录&#x1f31f; 写在前面&#x1f31f; TypeScript是什么&#xff1f;&#x1f31f;TypeScript 增加了什么&#xff1f;&#x1f31f;TypeScript 初体验&#x1f31f; 写在最后&#x1f31f; 写在前面 专栏介绍&#xff1a; 凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue …

什么是进程,线程,协程

一.进程1.简介计算机的核心是CPU&#xff0c;它承担了所有的计算任务&#xff1b;而操作系统是计算机的管理者&#xff0c;它负责任务的调度、资源的分配和管理&#xff0c;统领整个计算机硬件&#xff1b;应用程序则是具有某种功能的程序&#xff0c;程序是运行于操作系统之上…

十分钟验证一个轻量化车联网解决方案

智能网联汽车在车联网的应用上&#xff0c;通常是以智能传感器、物联网、GIS技术为基础&#xff0c;结合大数据、人工智能技术&#xff0c;通过OT&#xff08;Operation tecnology&#xff09;和IT&#xff08;information tecnology&#xff09;融合的方式&#xff0c;实现智能…