学习时间 0731

优化拼接字符串

String

  • 是复合类型 ,相当于char的数组

  • 是final类,也就是不支持继承

    public final class String {private final char value[];
    。。。。
    }
    
    • 低层分析:当String字符串进行拼接的时候,会创建一个新的char数组。

      **即:**每次对String对象进行操作,都需要创建新的对象,把数据一个个拷贝到新的空间。

    • **缺点:**占用了更多的空间,速度也慢。

如何解决这个问题?

  • 使用StringBuffer,同样是String对象,但是可以被多次修改。

StringBuffer——带同步块Synchronized,适合多线程使用,速度较慢

StringBuilder—— 新增的等价类,不带同步块,所以单线程使用,速度较快

3、面试题:三者区别

1、String 是字符串常量,对象一旦创建不可更改,这就导致**字符串常量池中没有所需的对象,**每次对String对象进行操作都会创建一个新的String对象,不仅效率低下还会浪费大量的内存空间。

2、StringBuffer和StringBuilder,是字符串变量,是可以改变的对象,和String不同的是,前者两个类型的对象能够被多次修改,且不产生新的未使用的对象。

3、StringBuffer和StringBuilder的差别在于:StringBuffer是线程安全的,StringBuilder是JDK新增的单个线程使用的等价类,也就是线程不安全的。

所以通常来说StringBuffer更安全(多线程),StringBuilder更快(单线程用)


JSON JavaScript Object Notation

目前已学的数据交互格式:

  • 拼接字符串:客户端 将信息拼接成字符串,再发送给服务器

    客户端<——拼接字符串——>服务端

  • XML格式:拓展标记语言(也是将字符串拼接成XML格式)

    • 常用于HTML
    • 缺点:比较重、麻烦——打包和解包麻烦 (多加了很多新的字符)
  • JSON格式:

1、认识JSON

  • JavaScript Object Notation 一种轻量级的数据交换格式。易于人阅读和编写,可以在多种语言之间进行数据交换

    • 易于机器解析和生成。
    • 本质上就是将对象——转换为——>字符串

2、JSON的两种结构

  • 对象用大括号表示{}

  • 列表用中括号表示[]

  • 语法如下

    [{key1:value1,key2:value2 },{key3:value3,key4:value4   }
    ]
    
  • 举个例子

    // 对象:
    {"friendId":"1001",
    "groupId":7,
    "qqid":"1003",
    "friendName":"小美1"
    }
    // 列表,(存放多个对象时可以分别用大括号表示
    [{"friendId":"1001","groupId":7,"qqid":"1003","friendName":"小美1"},{"friendId":"1001","groupId":7,"qqid":"1003","friendName":"小美1"}
    ]
    

3、JSON的用法

JSON是一种规范,就提供了工具包,这里使用阿里巴巴的包FASTJSON.jar

这里展示的JSON用法就是基于FASTJSON包来使用的。

最新下载地址github.com/alibaba/fastjson/wiki

⭐️JSON 字符串、JSON 对象、Bean 对象、集合对象之间的相互转换

  • 重要!!对象的属性权限要注意!类和属性也需要public公开的权限或者有公开的访问方式

  • 字符串 —— 对象

    • JSONObject.toJSONString:对象转字符串
    • JSONObject.parseObject(字符串, 类名.class);:字符串转换成对应的对象
  • 字符串——集合对象

    • JSONArray.toJSONString:集合转字符串
    • JSONArray.parseArray(字符串, 元素类名.class):字符串转集合
  • 字符串——JSON对象

    • JSONObject 本质是一种存放键值对映射的map格式的对象。可以使用put(key,value)插入元素
    • JSONObject.toJSONString一样,对象转字符串
    • JSONObject jsonObjNew = JSONObject.parseObject(jsonStr);:字符串转JSON对象
package com;import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;import java.util.ArrayList;
import java.util.List;public class JSONDemo2 {public static void main(String[] args) {// 声明学生对象Student stu1 = new Student("小A" , 15 , 001 ,"福建省厦门市思明区");Student stu2 = new Student("小B" , 11 , 002 ,"福建省福州市鼓楼区");Student stu3 = new Student("小C" , 17 , 003 ,"福建省泉州市丰泽区");// 声明一个列表存储对象ArrayList<Student> stuList = new ArrayList<>();stuList.add(stu1);stuList.add(stu2);stuList.add(stu3);// 1、JSON 字符串 —— 对象String stu1Json = JSONObject.toJSONString(stu1);System.out.println("对象转字符串:"+stu1Json);Student stu1New = JSONObject.parseObject(stu1Json , Student.class);System.out.println("字符串转对象:  "+stu1New);// 2JSON字符串 —— 集合对象String listJson = JSONArray.toJSONString(stuList);System.out.println("集合转字符串:"+listJson);List<Student> studentList = JSONArray.parseArray(listJson, Student.class);System.out.println("字符串转数组:(长度)"+ studentList.size()+"(内容)"+studentList.get(0)+studentList.get(1)+studentList.get(2));// 3 JSON字符串 —— JSON对象JSONObject jsonObject = new JSONObject();jsonObject.put("type","学生信息");jsonObject.put("list",stuList); // json对象存放数组jsonObject.put("object",stu1);  // json对象存放对象String jsonStr = JSONObject.toJSONString(jsonObject);System.out.println("JSON对象转字符串:"+jsonStr);JSONObject jsonObjNew = JSONObject.parseObject(jsonStr);System.out.println(jsonObjNew.get("type"));System.out.println(jsonObjNew.get("list"));System.out.println(jsonObjNew.get("object"));}
}
package com;public class Student {public String name;public int age;public int stuID;public String address;public Student(String name, int age, int stuID, String address) {this.name = name;this.age = age;this.stuID = stuID;this.address = address;}@Overridepublic String toString() {return "Student类的值为:{" +"name='" + name + '\'' +", age=" + age +", stuID=" + stuID +", address='" + address + '\'' +'}';}
}
输出结果
对象转字符串:{"address":"福建省厦门市思明区","age":15,"name":"小A","stuID":1}
字符串转对象:  Student类的值为:{name='小A', age=15, stuID=1, address='福建省厦门市思明区'}集合转字符串:[{"address":"福建省厦门市思明区","age":15,"name":"小A","stuID":1},{"address":"福建省福州市鼓楼区","age":11,"name":"小B","stuID":2},{"address":"福建省泉州市丰泽区","age":17,"name":"小C","stuID":3}]
字符串转数组:(长度)3(内容)Student类的值为:{name='小A', age=15, stuID=1, address='福建省厦门市思明区'}Student类的值为:{name='小B', age=11, stuID=2, address='福建省福州市鼓楼区'}Student类的值为:{name='小C', age=17, stuID=3, address='福建省泉州市丰泽区'}JSON对象转字符串:{"type":"学生信息","list":[{"address":"福建省厦门市思明区","age":15,"name":"小A","stuID":1},{"address":"福建省福州市鼓楼区","age":11,"name":"小B","stuID":2},{"address":"福建省泉州市丰泽区","age":17,"name":"小C","stuID":3}],"object":{"$ref":"$.list[0]"}}学生信息
[{"address":"福建省厦门市思明区","stuID":1,"name":"小A","age":15},{"address":"福建省福州市鼓楼区","stuID":2,"name":"小B","age":11},{"address":"福建省泉州市丰泽区","stuID":3,"name":"小C","age":17}]
{"address":"福建省厦门市思明区","stuID":1,"name":"小A","age":15}

4、如何让客户端判断接受的是什么对象?

因为JSON对象本质上就是键值对的类型 (MAP),就可以将要传递的对象打包为一个JSONObject对象

具体方法(发送端,打包)

  1. 创建一个JSONObject对象
  2. 使用put(key,value)的方法将信息存入
  3. 第一个信息就固定表示这个对象存储的类型
  4. 将这个对象转换为JSON格式的字符串
  5. 传递这个字符串即可

(接收端:打包

  1. 使用JSONObject.parseObject方法将字符串转换为JSONObject对象

  2. 使用JSONObject的成员方法,即可获得对应的value

    • getString(key):获得字符串型的对象

    • getJSONArray:获得列表型的对象。具体转换方法

      JSONArray jsonAry = jsonObject.getJSONArray("list");
      List<QQGroup> list = jsonAry.toJavaList(QQ.class);
      

补充知识点:XML语言(Extensible Markup Language)。

  • XML 指可扩展标记语言。是一种标记语言,是从标准通用标记语言(SGML)中简化修改出来的。它主要用到的有可扩展标记语言、可扩展样式语言(XSL)、XBRL和XPath等。

  • XML有以下特点:

    1. XML可以从HTML中分离数据
    2. XML可用于交换数据。基于XML可以在不兼容的系统之间交换数据,把数据转换为XML格式存储将大大减少交换数据时的复杂性,还可以使这些数据能被不同的程序读取。
    3. XML可应用于B2B中。目前XML正成为遍布网络的商业系统之间交换信息所使用的主要语言。例如在网络中交换金融信息。
    4. 利用XML可以共享数据。XML数据以纯文本格式存储,使不同系统、不同程序之间的数据共享变得更加简单。
    5. XML可以充分利用数据。就像操作数据库一样,XML的数据可以被各种各样的“阅读器”处理
    6. XML可以用于创建新的语言。WAP和WML语言都是由XML发展来的。

    总之,XML使用一个简单而又灵活的标准格式,为基于Web的应用提供了一个描述数据和交换数据的有效手段。但是,XML并非是用来取代HTML的。HTML着重如何描述将文件显示在浏览器中,而XML与SGML相近,它着重描述如何将数据以结构化方式表示。

补充知识点:XML和JSON的区别

1、JSON是JavaScript Object Notation;XML是可扩展标记语言。

2、JSON是基于JavaScript语言;XML源自SGML。

3、JSON是一种表示对象的方式;XML是一种标记语言,使用标记结构来表示数据项。

4、JSON不提供对命名空间的任何支持;XML支持名称空间。

5、JSON支持数组;XML不支持数组。

6、XML的文件相对难以阅读和解释;与XML相比,JSON的文件非常易于阅读。

7、JSON不使用结束标记;XML有开始和结束标签。

8、JSON的安全性较低;XML比JSON更安全。

9、JSON不支持注释;XML支持注释。

10、JSON仅支持UTF-8编码;XML支持各种编码

原文

【Java学习笔记】 网络编程04 优化字符串拼接:JSON相关推荐

  1. Java学习笔记-网络编程

    Java提供了网络编程,并且在实际中有着大量运用 网络编程 网络编程概述 网络模型 OSI参考模型 TCP/IP参考模型 网络通讯要素 IP地址 端口号 传输协议 网络参考模型 网络通讯要素 IP地址 ...

  2. java 学习笔记-网络编程(八)

    网络编程 标签:学习各种网络协议的桥梁 什么是计算机网络 计算机网络的作用:资源共享和信息传递. 计算机网络的组成: a) 计算机硬件:计算机(大中小型服务器,台式机.笔记本等).外部设备(路由器.交 ...

  3. Java学习之网络编程实例

    转自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 多谢分享 网络编程 网络编程对于很多的初学者来说,都是很向往的一 ...

  4. Python学习笔记:网络编程

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  5. Go语言学习笔记 (网络编程)

    网络编程分层概念:​ 层与协议 简单的例子: package mainimport ("fmt""net" )func main() {listenner, e ...

  6. Java 学习之网络编程案例

    网络编程案例 一,概念 1,网络编程不等于网站编程 2,编程只和传输层打交道,即TCP和UDP两个协议 二,案例 1,TCP实现点对点的聊天 Server端:两个输入流:读客户端和控制台,一个输出端: ...

  7. java文件传输连接方式_Java 学习笔记 网络编程 使用Socket传输文件 CS模式

    Socket的简单认识 Socket是一种面向连接的通信协议,Socket应用程序是一种C/S(Client端/Server端)结构的应用程序 Socket是两台机器间通信的端点. Socket是连接 ...

  8. java学习之网络编程

    相关知识点: Transient:Java中的关键字,只能修饰变量,不能修饰类和方法. 作用:使被修饰的变量无法被序列化. 拓展:一个静态变量,无论是否被transient修饰都无法被序列化.若静态变 ...

  9. Java学习笔记(七)--格式化字符串及格式输出

    一.格式化字符串 String 类的静态 format() 方法用于创建格式化的字符串. 1.format(String format, Object···args) 该方法使用指定的格式字符串和参数 ...

最新文章

  1. 熬了一晚上,我从零实现了Transformer模型,把代码讲给你听
  2. jfinal为weebox弹出框传递参数
  3. Android开发之使用BroadcastReceiver实时监听电量(源代码分享)
  4. Zabbix的web界面基本操作
  5. Java Struts2 (一)
  6. Leetcode 130. 被围绕的区域 解题思路及C++实现
  7. 使用pip安装python库的几种方式,解决pip安装python库慢的问题
  8. 产品经理必须要掌握的12种思维模型
  9. 小学生都开始学Python了,你还不抓紧提升技术?
  10. 谷歌推出 Kotlin 免费在线课程
  11. eclipse plugins
  12. Bailian4067 回文数字(Palindrome Number)【数学】
  13. 如何从零构建你的自动化运维体系?——从制度到技术
  14. VS2008中MFC界面编程Caption中文全是乱码的解决办法 -转载
  15. [Opencv]圆盘目标跟踪系统——激光打靶
  16. 插上移动硬盘计算机没反应,移动硬盘插电脑没反应怎么办解决教程
  17. java date the type is ambiguous_一个java ambiguous method 的问题
  18. 微信小程序消息从公众号推送
  19. Linux菜鸟笔记——修改默认语系
  20. Abp vnext Web应用程序开发教程 5 —— 授权

热门文章

  1. FEM基函数:从理论推导到matlab实现形式
  2. 计算机证是准入类吗,准入类与水平类证书的区别
  3. vSphere HA 准入控制 一、插槽策略准入控制
  4. 数学建模系列-预测模型(六)---微分方程模型
  5. 伽马校正(gamma correction)学习笔记
  6. 设计模式学习(八) 模板方法模式
  7. Wireshark(鲨鱼鳍)抓包工具
  8. 动网8.1后台拿站技巧
  9. C语言函数及复杂数据结构的综合应用——简单户籍管理系统
  10. Velodyne已出货的激光雷达传感器价值达5亿美元