首页
社区
课程
招聘
[分享]引用计数 深拷贝浅拷贝 json
发表于: 2021-5-26 01:22 3312

[分享]引用计数 深拷贝浅拷贝 json

2021-5-26 01:22
3312

深拷贝浅拷贝

//浅拷贝(不同的对象,公用一块内存)- (省内存,效率高 不安全)重复释放,修改会影响其他的对象。
//深拷贝(不同对象,有自己独立的内存)-(耗内存,效率低 安全)
//写时拷贝 修改的时候作深拷贝。

引用计数

image.png

文件流

一般功能
打开 关闭 读写 文件指针操作

 

C++文件流
读写文件的时候要移动文件指针

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
fstream fs;
   fs.open("C:\\Users\\Administrator\\source\\repos\\CMyString.cpp", ios::binary| ios::in| ios::out);
 
   if (!fs.is_open())
   {
       cout << "文件打开失败" << endl;
   }
 
   char aryBuf[0x1000] = { 0 };
   fs.read(aryBuf,sizeof(aryBuf));
 
   fs.seekp(0);
 
   char str[] = { "hello world" };
   fs.write(str, sizeof(str));
 
   fs.close();
   std::cout << "Hello World!\n";

json

json 是一个带有格式的字符串

 

1、什么是json
JSON:一种与开发语言无关的、轻量级的数据存储格式,全称JavaScript Object Notation,一种数据格式的标准规范,起初来源于JavaScript这门语言,后来随着使用的广泛,几乎每门开发语言都有处理JSON的API。
优点:易于人的阅读和编写,易于程序解析与生产。
JSON样例:首先一个花括号{},整个代表一个对象,同时里面是一种Key-Value的存储形式,它还有不同的数据类型来区分

2、数据类型表示
数据结构:Object、Array
基本类型:string,number,true,false,null
(1)Object
{key:value,key:value...}
key:string类型
value:任何基本类型或数据结构
(2)Array
[value,value...]
value:任何基本类型或数据结构。
比如:{"name":"李广", "values":[1,2,45,"你好"] }
3、JSON数据示例

二、JSON IN JAVA
1、json使用

2、使用Map构建json
【a】:创建Map集合,通过Map的put方法存储数据。
【b】创建JSONObject对象并把Map对象作为参数

3、使用Java Bean构建对象
【a】创建Java Bean
【b】创建JSONObject,并把Bean作为参数

4、从文件读取json
辅助:一般解析JSON数据时,需要获取JSON数据的途径,这个途径可能是文件读取或远程API网络上获取JSON数据,这里讲解从文件途径中进行文件读取,并转换成一个我们想要的对象,在pom文件中引入common-io的依赖,该包方便读取文件的内容。
案例:从一个文件中读取JSON数据,并转换为对象。
步骤1:项目中创建王小二的JSON格式数据。

步骤2:读取该文件,首先声明JSON文件的File,并指明该文件的路径(项目的根路径下)

步骤3:通过FileUtils类的readFileToString读入JSON文件,再通过JSONObject构造函数传入读入的JSON文件。

JSONObject提供了一些获取指定key值的方法:
【1】getString("key")获取value类型为String的值
【2】getDouble("key")获取value类型为number的值
【3】getBoolean("key")获取value类型为boolean的值
【4】getJSONArray("key")获取value类型为数组的值,它的返回值是JSONArray,它是一个数组。

如果在读取时,JSON数据中没有指定key,一般需要打印一个日志或者抛出一个异常,这里可以使用JSONObject对象的isNull("key")方法,判断如果没有key值做一些操作。
三、GSON的使用
1、GSON生成json数据
步骤1:添加依赖

步骤2:使用JavaBean创建GSON数据,通过GSON的toJson(Bean对象)就可以转换为GSON数据。

GSON:可以使用@SerializedName(“NAME”)改变GSON的key值。

2、生成json数据
GSON:可以输出JSON样式数据,可以使用GsonBuilder在构建JSON数据过程中,使用setPrettyPrinting()方法,然后就不使用new Gson对象而是通过gsonBuilder.create()来创建Gson对象。

GSON:可以使用GsonBuilder对象在解析时,使用setFieldNamingStrategy(回调函数)进行一些操作,例如:把Key变成大写,如果为其他还是默认值。

GSON:JavaBean的有些属性不想暴露在JSON数据中,通过JSON的默认生成方式会将所有属性生成key和value进行输出,而GSON通过声明一个类型为transient类型的属性,这样在JSON数据生成过程中就会忽略掉该属性。


3、GSON解析

4、GSON解析 日期转换
JSON不支持日期格式数据,所以只能使用String类型的日期。但是java中有Date数据类型的数据,GSON是支持日期类型数据的(此处的支持是指将日期转换成Date的格式)。
步骤1:创建Gson对象时,通过new GsonBuilder()的setDateFormat(“yyyy-MM-dd”).create(),通过该模板GSON会把符合该模式的字符串日期自动转换成Date的类型

5、集合类解析
GSON另外一个常用操作:进行转换和解析过程中,能够将JSON中的数组和java中的集合类进行对接。
案例:这里把实体类中数组类型的major换为集合类型List。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 1041
活跃值: (733)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
学习了
2021-5-27 08:15
0
游客
登录 | 注册 方可回帖
返回
//