我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SpringBoot整合Jackson的方法是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SpringBoot整合Jackson的方法是什么

这篇文章主要介绍了SpringBoot整合Jackson的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot整合Jackson的方法是什么文章都会有所收获,下面我们一起来看看吧。

一、Jackson简介

说明:本篇讲的是Jackson的详细用法,Jackson工具类在文章最后,直接复制粘贴即可使用。 Jackson是公司中必用的组件之一,常用的还用阿里的Fastjson,但是由于一些原因bug与漏洞是在是太多,在注重安全的公司直接被pass,还有就是谷歌的Gson(这个没用过不太了解)。 Spring MVC 的默认 json 解析器便是 Jackson。 Jackson 优点很多。 Jackson 所依赖的 jar 包较少 ,简单易用。与其他 Java 的 json 的框架 Gson 等相比, Jackson 解析大的 json 文件速度比较快;Jackson 运行时占用内存比较低,性能比较好;Jackson 有灵活的 API,可以很容易进行扩展和定制。

额外了解:
Jackson 的 1.x 版本的包名是 org.codehaus.jackson
当升级到 2.x 版本时,包名变为com.fasterxml.jackson

Jackson 有三个核心包,分别是 StreamingDatabidAnnotations,通过这些包可以方便的对 JSON 进行操作.

  • jackson-core:核心包,提供基于"流模式"解析的相关 API,它包括 JsonPaser 和 JsonGenerator。 Jackson 内部实现正是通过高性能的流模式 API 的 JsonGenerator 和 JsonParser 来生成和解析 json。

  • jackson-annotations:注解包,提供标准注解功能.

  • jackson-databind :数据绑定包, 提供基于"对象绑定" 解析的相关 API ( ObjectMapper ) 和"树模型" 解析的相关 API (JsonNode);基于"对象绑定" 解析的 API 和"树模型"解析的 API 依赖基于"流模式"解析的 API。包含上面两个包,只导入这个坐标即可。

运行环境:

  • idea2020.2

  • jdk1.8

  • springboot 2.7.9

下载demo:直接去我的资源下载即可(Jackson实例-附工具类)

二、Json简介

说明: 作为Java开发一定要学习Json,在现在的前后端分离的项目中,Json是最常见的数据交换格式。比如SpringBoot中@RequestBody注解就是作为接收Json格式的注解,在使用Postman进行测试时传输的raw-json也是Json格式数据。

JSON表示结构:
对象数组: 对象结构以”{”大括号开始,以”}”大括号结束,中间部分由0或多个以”,”分隔的”key(关键字)/value(值)”对构成,关键字和值之间以”:”分隔,语法结构如代码。这里给一个示例。

{  "array": [1,2,3],  "boolean": true,  "name": "cllb",  "null": null,  "age": 12345,  "object": {    "height": 100,    "color": "红色"  },  "string": "陈老老老板"}

三、springboot整合Jackson

1.创建项目

说明: 创建一个空springboot项目(2.7.9版本)。这里就不过多复述了,创建时将lombok组件选上,十分方便无需再写Get/Set方法。
注意:可以看到导入databind包会自动导入剩下两个包。

SpringBoot整合Jackson的方法是什么

2.导入坐标

说明: 可以看到导入databind包会自动导入剩下两个包。

<dependency>    <groupId>com.fasterxml.jackson.core</groupId>    <artifactId>jackson-databind</artifactId>    <version>2.13.3</version></dependency>

SpringBoot整合Jackson的方法是什么

3.配置文件

a.配置文件配置

properties格式:

#指定日期格式,比如yyyy-MM-dd HH:mm:ss,或者具体的格式化类的全限定名spring.jackson.date-format#指定日期格式化时区,比如America/Los_Angeles或者GMT+10.spring.jackson.time-zone#是否开启Jackson的反序列化spring.jackson.deserialization#是否开启json的generators.spring.jackson.generator#指定Joda date/time的格式,比如yyyy-MM-ddHH:mm:ss). 如果没有配置的话,dateformat会作为backupspring.jackson.joda-date-time-format#指定json使用的Locale.spring.jackson.locale#是否开启Jackson通用的特性.spring.jackson.mapper#是否开启jackson的parser特性.spring.jackson.parser#指定PropertyNamingStrategy(CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES)或者指定PropertyNamingStrategy子类的全限定类名.spring.jackson.property-naming-strategy#是否开启jackson的序列化.spring.jackson.serialization#指定序列化时属性的inclusion方式,具体查看JsonInclude.Include枚举.spring.jackson.serialization-inclusion

yml格式:

spring:  jackson:    #日期格式化    date-format: yyyy-MM-dd HH:mm:ss    time-zone: GMT+8    #设置空如何序列化    default-property-inclusion: non_null        serialization:       #格式化输出       indent_output: true      #忽略无法转换的对象      fail_on_empty_beans: false    deserialization:      #允许对象忽略json中不存在的属性      fail_on_unknown_properties: false    parser:      #允许出现特殊字符和转义符      allow_unquoted_control_chars: true      #允许出现单引号      allow_single_quotes: true

b.自定义配置

说明: 这里直接将Jackson工具类给大家,自定义配置指的就是工具类中,对于object_mapper的set赋值。什么方法都有,演示也直接使用工具类进行。

package com.clllb.jackson.utils;import com.fasterxml.jackson.annotation.JsonInclude;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.core.type.TypeReference;import com.fasterxml.jackson.databind.*;import lombok.extern.slf4j.Slf4j;import org.springframework.util.StringUtils;import java.io.File;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.List;@Slf4jpublic class JacksonUtil {    private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();    private static final ObjectMapper OBJECT_MAPPER_SNAKE_CASE = new ObjectMapper();    // 日期格式化    private static final String STANDARD_FORMAT = "yyyy-MM-dd HH:mm:ss";    static {        //对象的所有字段全部列入        OBJECT_MAPPER.setSerializationInclusion(JsonInclude.Include.ALWAYS);        //取消默认转换timestamps形式        OBJECT_MAPPER.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);        //忽略空Bean转json的错误        OBJECT_MAPPER.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);        //所有的日期格式都统一为以下的样式,即yyyy-MM-dd HH:mm:ss        OBJECT_MAPPER.setDateFormat(new SimpleDateFormat(STANDARD_FORMAT));        //忽略 在json字符串中存在,但是在java对象中不存在对应属性的情况。防止错误        OBJECT_MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);    }    static {        //对象的所有字段全部列入        OBJECT_MAPPER_SNAKE_CASE.setSerializationInclusion(JsonInclude.Include.ALWAYS);        //取消默认转换timestamps形式        OBJECT_MAPPER_SNAKE_CASE.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);        //忽略空Bean转json的错误        OBJECT_MAPPER_SNAKE_CASE.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);        //所有的日期格式都统一为以下的样式,即yyyy-MM-dd HH:mm:ss        OBJECT_MAPPER_SNAKE_CASE.setDateFormat(new SimpleDateFormat(STANDARD_FORMAT));        //忽略 在json字符串中存在,但是在java对象中不存在对应属性的情况。防止错误        OBJECT_MAPPER_SNAKE_CASE.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);        //转换为下划线        OBJECT_MAPPER_SNAKE_CASE.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);    }    private JacksonUtil() {    }        public static <T> String obj2String(T obj) {        if (obj == null) {            return null;        }        try {            return obj instanceof String ? (String) obj : OBJECT_MAPPER.writeValueAsString(obj);        } catch (JsonProcessingException e) {            log.warn("Parse Object to String error : {}", e.getMessage());            return null;        }    }         public static void obj2File(String fileName,Object obj){        if (obj == null){            return;        }         try {             OBJECT_MAPPER.writeValue(new File(fileName),obj);         } catch (IOException e) {             e.printStackTrace();         }     }        public static <T> String obj2StringFieldSnakeCase(T obj) {        if (obj == null) {            return null;        }        try {            ObjectMapper objectMapper = OBJECT_MAPPER_SNAKE_CASE;            return obj instanceof String ? (String) obj : objectMapper.writeValueAsString(obj);        } catch (JsonProcessingException e) {            log.warn("Parse Object to String error : {}", e.getMessage());            return null;        }    }        public static <T> T string2ObjFieldLowerCamelCase(String str, Class<T> clazz) {        if (StringUtils.isEmpty(str) || clazz == null) {            return null;        }        try {            ObjectMapper objectMapper = OBJECT_MAPPER_SNAKE_CASE;            return clazz.equals(String.class) ? (T) str : objectMapper.readValue(str, clazz);        } catch (Exception e) {            log.warn("Parse String to Object error : {}", e.getMessage());            return null;        }    }        public static <T> List<T> string2ListFieldLowerCamelCase(String str, TypeReference<List<T>> typeReference) {        if (StringUtils.isEmpty(str) || typeReference == null) {            return null;        }        try {            ObjectMapper objectMapper = OBJECT_MAPPER_SNAKE_CASE;            return objectMapper.readValue(str, typeReference);        } catch (Exception e) {            log.warn("Parse String to Object error : {}", e.getMessage());            return null;        }    }        public static <T> String obj2StringPretty(T obj) {        if (obj == null) {            return null;        }        try {            return obj instanceof String ? (String) obj : OBJECT_MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(obj);        } catch (JsonProcessingException e) {            log.warn("Parse Object to String error : {}", e.getMessage());            return null;        }    }        public static <T> T string2Obj(String str, Class<T> clazz) {        if (StringUtils.isEmpty(str) || clazz == null) {            return null;        }        try {            return clazz.equals(String.class) ? (T) str : OBJECT_MAPPER.readValue(str, clazz);        } catch (Exception e) {            log.warn("Parse String to Object error : {}", e.getMessage());            return null;        }    }        public static <T> T string2Obj(String str, TypeReference<T> typeReference) {        if (StringUtils.isEmpty(str) || typeReference == null) {            return null;        }        try {            return (T) (typeReference.getType().equals(String.class) ? str : OBJECT_MAPPER.readValue(str, typeReference));        } catch (IOException e) {            log.warn("Parse String to Object error", e);            return null;        }    }    public static <T> T string2Obj(String str, Class<?> collectionClazz, Class<?>... elementClazzes) {        JavaType javaType = OBJECT_MAPPER.getTypeFactory().constructParametricType(collectionClazz, elementClazzes);        try {            return OBJECT_MAPPER.readValue(str, javaType);        } catch (IOException e) {            log.warn("Parse String to Object error : {}" + e.getMessage());            return null;        }    }}

4.实体类

说明: 这里创建一个user实体类

package com.clllb.jackson.PO;import lombok.Data;import java.util.List;@Datapublic class User {    private String username;    private Integer age;    private List<String> info;private Long userId;}

项目样图:

SpringBoot整合Jackson的方法是什么

5.测试类

说明: 测试类中直接调工具类中的方法,非常简单,附输出结果。

a.object类型转Json

说明: 使用writeValueAsString方法

  @Test    void obj2string(){        User user = new User();        user.setUsername("clllb");        user.setAge(24);        user.setUserId(1L);        List<String> infoList = new ArrayList<>();        infoList.add("有一百万");        infoList.add("发大财");        user.setInfo(infoList);        String json = JacksonUtil.obj2String(user);        System.out.println(json);    }

输出结果:

{"username":"clllb","age":24,"info":["有一百万","发大财"],"userId":1}

b.object类型转file

说明: 使用writeValue方法

  @Test    void obj2file(){        User user = new User();        user.setUsername("clllb");        user.setAge(24);        user.setUserId(1L);        List<String> infoList = new ArrayList<>();        infoList.add("有一百万");        infoList.add("发大财");        user.setInfo(infoList);        String fileName = "ccccc";        JacksonUtil.obj2File(fileName,user);    }

输出结果:

SpringBoot整合Jackson的方法是什么

c.string类型转Object自定义类型

说明: 使用readValue方法

 @Test    void string2obj(){        String json = "{\"username\":\"clllb\",\"age\":24,\"info\":[\"有一百万\",\"发大财\"],\"userId\":11}";        User user = JacksonUtil.string2Obj(json, User.class);        System.out.println(user);    }

输出结果:

User(username=clllb, age=24, info=[有一百万, 发大财], userId=11)

d.string类型转Object自定义类型list

说明: 使用readValue方法,传参变为TypeReference typeReference,这里工具类用的重载方法名是相同的。

@Test    void string2objList(){        String json = "[{\"username\":\"clllb\",\"age\":24,\"info\":[\"有一百万\",\"发大财\"],\"userId\":11},\n" +                "{\"username\":\"陈老老老板\",\"age\":25,\"info\":[\"有一千万\",\"发大大财\"],\"userId\":12}]";        List<User> user = JacksonUtil.string2Obj(json, new TypeReference<List<User>>(){});        user.forEach(System.out::println);    }

输出结果:

User(username=clllb, age=24, info=[有一百万, 发大财], userId=11)
User(username=陈老老老板, age=25, info=[有一千万, 发大大财], userId=12)

e.object类型转String(驼峰转下划线)

说明: 使用writeValueAsString方法,这里区别看工具类就会发现,就是多了一个设置OBJECT_MAPPER_SNAKE_CASE.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);

 @Test    void obj2sringSnakeCase(){        User user = new User();        user.setUsername("clllb");        user.setAge(24);        user.setUserId(11L);        List<String> infoList = new ArrayList<>();        infoList.add("有一百万");        infoList.add("发大财");        user.setInfo(infoList);        String json = JacksonUtil.obj2StringFieldSnakeCase(user);        System.out.println(json);    }

输出结果:

{"username":"clllb","age":24,"info":["有一百万","发大财"],"user_id":11}

f.string类型(下划线)转Object类型

<font color = 'red'><b>说明:</font> 使用readValue方法```java @Test    void string2obj(){        String json = "{\"username\":\"clllb\",\"age\":24,\"info\":[\"有一百万\",\"发大财\"],\"user_id\":11}";        User user = JacksonUtil.string2Obj(json, User.class);        System.out.println(user);    }

输出结果:

User(username=clllb, age=24, info=[有一百万, 发大财], userId=11)

g.string类型(下划线)转Object自定义类型list

说明: 使用readValue方法,传参变为TypeReference typeReference,这里工具类用的重载方法名是相同的。

 @Test    void string2objSnakeCase(){        String json = "[{\"username\":\"clllb\",\"age\":24,\"info\":[\"有一百万\",\"发大财\"],\"user_id\":11},\n" +                "{\"username\":\"陈老老老板\",\"age\":25,\"info\":[\"有一千万\",\"发大大财\"],\"user_id\":12}]";        List<User> user = JacksonUtil.string2ListFieldLowerCamelCase(json, new TypeReference<List<User>>(){});        user.forEach(System.out::println);    }

输出结果:

User(username=clllb, age=24, info=[有一百万, 发大财], userId=11)
User(username=陈老老老板, age=25, info=[有一千万, 发大大财], userId=12)

关于“SpringBoot整合Jackson的方法是什么”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“SpringBoot整合Jackson的方法是什么”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SpringBoot整合Jackson的方法是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SpringBoot整合Jackson的方法是什么

这篇文章主要介绍了SpringBoot整合Jackson的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot整合Jackson的方法是什么文章都会有所收获,下面我们一起来看看吧。一、J
2023-07-05

SpringBoot整合aws的方法是什么

这篇文章主要讲解了“SpringBoot整合aws的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot整合aws的方法是什么”吧!引入依赖
2023-06-21

SpringBoot整合RocketMQ的方法是什么

这篇文章主要介绍了SpringBoot整合RocketMQ的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot整合RocketMQ的方法是什么文章都会有所收获,下面我们一起来看看吧。1
2023-07-05

SpringBoot整合Swagger的方法是什么

本文小编为大家详细介绍“SpringBoot整合Swagger的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringBoot整合Swagger的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知
2023-07-06

springboot整合mongodb的方法是什么

这篇文章主要介绍“springboot整合mongodb的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springboot整合mongodb的方法是什么”文章能帮助大家解决问题。1.mo
2023-07-05

SpringBoot整合Lettuce redis的方法是什么

这篇文章主要介绍了SpringBoot整合Lettuce redis的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot整合Lettuce redis的方法是什么文章都会有所收获,下面
2023-07-06

springboot hutool整合email的方法是什么

本篇内容主要讲解“springboot hutool整合email的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springboot hutool整合email的方法是什么”吧!内容
2023-07-05

Java SpringBoot整合JSP和MyBatis的方法是什么

这篇文章主要介绍“Java SpringBoot整合JSP和MyBatis的方法是什么”,在日常操作中,相信很多人在Java SpringBoot整合JSP和MyBatis的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作
2023-07-05

java SpringBoot项目整合Redis的方法是什么

这篇文章主要介绍了java SpringBoot项目整合Redis的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java SpringBoot项目整合Redis的方法是什么文章都会有所收获,下面我们
2023-07-05

Java springboot整合Shiro框架的方法是什么

本篇内容主要讲解“Java springboot整合Shiro框架的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java springboot整合Shiro框架的方法是什么”吧!Sh
2023-06-26

ElasticSearch整合SpringBoot搭建配置的方法是什么

本文小编为大家详细介绍“ElasticSearch整合SpringBoot搭建配置的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“ElasticSearch整合SpringBoot搭建配置的方法是什么”文章能帮助大家解决疑惑,下
2023-07-05

SpringBoot整合消息队列RabbitMQ的方法是什么

本篇内容介绍了“SpringBoot整合消息队列RabbitMQ的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!简介在Spring
2023-07-05

springboot整合druid及配置依赖的方法是什么

本篇内容主要讲解“springboot整合druid及配置依赖的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springboot整合druid及配置依赖的方法是什么”吧!Druid简
2023-06-22

Java Springboot整合支付宝接口的方法是什么

本篇内容主要讲解“Java Springboot整合支付宝接口的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java Springboot整合支付宝接口的方法是什么”吧!一、创建支付
2023-07-05

SpringBoot整合Quartz及异步调用的方法是什么

这篇文章主要介绍“SpringBoot整合Quartz及异步调用的方法是什么”,在日常操作中,相信很多人在SpringBoot整合Quartz及异步调用的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答
2023-07-05

SpringBoot整合tkMapper的方法

项目使用SpringBoot2.0,H2数据库,使用了 Lombok 简化代码,下面是本人使用SpringBoot整合tkMapper的一个小demo,记录下来本人在此处踩得坑
2022-11-13

springboot整合quartz定时任务框架的方法是什么

今天小编给大家分享一下springboot整合quartz定时任务框架的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下
2023-06-26

springboot分布式整合dubbo的方式是什么

这篇文章主要讲解了“springboot分布式整合dubbo的方式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springboot分布式整合dubbo的方式是什么”吧! Dubbo是
2023-06-21

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录