使用Gson序列化对象时,默认情况下,对象值为“null”的字段在输出值会被忽略(NOTE:collections和arrays中的null对象会被保留)。如果要使Gson序列化对象输出所有的null值,可使用如下方法进行配置。

1
Gson gson = new GsonBuilder().serializeNulls().create();

NOTE: 当使用Gson序列化null值时,它会添加JsonNull元素到JsonElement结构中。

Continue reading

有时候在调试代码时,需要格式化输出JSON字符串,使其便于开发者/测试者查看,本文记录的就是使用Gson如何格式化输出JSON字符串。

Gson默认的JSON输出是紧凑的JSON格式,这意味着在输出的JSON结构中没有任何空白字符,因此,在JSON输出中,字段名及其字段值,对象字段和数组中的对象间都没有空白字符,另外“null”字段在输出时会忽略(NOTE:collections/arrays中的null值会保留)。如果要使用Pretty Print输出JSON,可以使用GsonBuilder配置JsonPrintFormatter,该格式默认会输出80字符宽度,2字符缩进,右边距为4字符。

Continue reading

本文记录的在Mac下pandoc转换markdown输出含中文的文本,包含一些依赖的安装以及命令使用,最后的参考文档给了我很大帮助。

  1. pandoc的安装

  2. 转换pdf常用参数

pandoc的安装

简要记录安装步骤如下:

  1. 按照pandoc官方网站说明, 下载安装pandoc

  2. 按照pandoc官方网站说明,转换输出PDF时,需要LaTeX,下载安装MacTex-Additions和BasicTex

  3. 在tzengyuxio的开源项目中下载pm-template.latex pdf中文模板,将该模板中setCJKmainfont字段值LiHei Pro修改为电脑上带有的中文字体,我的自己安装了微软雅黑字体,于是修改成了Microsoft YaHei

  4. 使用tlmgr工具安装依赖titling和lastpage

1
2
$sudo tlmgr install titling
$sudo tlmgr install lastpage
  1. 使用命令pandoc --latex-engine=xelatex --template=pm-template markdown_strict.md -o markdown.pdf转换输出pdf, 可将pm-template.latex文件放置任意处,只是需要使用–template参数指定其路径.
Continue reading

在markdown中命名锚一文中描述了在markdown文本中嵌入HTML代码来命名锚,但是总觉得HTML+markdown在一起较别扭。最近了解了pandoc,发现pandoc‘s markdown中headers一节有这种功能描述, 记录如下。 定义Header的identifier如下: 1##My Header## {#foo} 这样我们在创建文章目录索引时,可以如下创
Continue reading

  1. 概览
  2. 幻灯片的结构化
  3. 增量式列表
  4. 插入停顿
  5. 定义幻灯片样式
  6. 转化HTML slide shows常用参数

概览

本文记录的是如何使用pandoc将markdown格式文本转换输出为HTML slide shows。你能够使用Pandoc将markdown转换输出HTML+javascript的幻灯片,这样就可通过web浏览器浏览。可以通过S5,DZSlides,Slidy,Slideous或者reveal.js引擎转换输出HTML幻灯片,也可以使用LaTeX beamer转换输出PDF的幻灯片。

下面是官网文档中的markdown源码文件,稍作修改,habits.md:

Continue reading

本文记录Java中关闭Chained-Streams的正确方式。

在Java开发过程中,我们时常使用这样的方式创建输入输出流,如下方式1:

1
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));

或者如下方式2创建:

1
2
3
FileOutputStream fos = new FileOutputStream(...)
BufferedOS bos = new BufferedOS(fos);
ObjectOutputStream oos = new ObjectOutputStream(bos);

使用方式1时,我们仅仅使用br.close()是否会造成流资源的不正确关闭?使用方式2时,是否需要把创建的每个流(oos/bos/fos)都依次关闭呢?

Continue reading

项目中有时需要在Java类中启动一个长时间运行的服务进程(监听进程、监控进程等),且该进程需要在tomcat启动时启动,在tomcat停止时退出。在项目开发的过程中,我需要在Java类中启动一个监听进程,而在该进程成功启动后,一调用该监听服务进程时,该进程就挂掉(退出),现将解决方法记录如下。

Continue reading

本文记录的是如何在Java类中调用外部可执行脚本,例如shell脚本、Python脚本、ruby脚本等。文中阐述了Runtime.exec和ProcessBuilder.start两种调用脚本的方式,官方推荐使用后者的方式,下面对其分别讲述。

Continue reading

本文记录的是如何使用markdown命名锚(names anchors),当使用命名锚时,我们可以创建文章目录,直接跳至该命名锚(比如页面中某个小节)的链接,这样使用者就无需不停地滚动页面来寻找他们需要的信息了。

其实使用markdown不能直接达到定义命名锚的目的,借助了html的功能。在定义标题时不使用markdown语法(#个数对应相应级别的HTML样式标题),而使用h1/h2等,且使用id属性命名锚,如:

Continue reading

shell之printf

in 系统运维

本文记录的是shell之printf格式化输出.

首先看看其 man page 内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
NAME
printf -- formatted output

SYNOPSIS
printf format [arguments ...]

DESCRIPTION
The printf utility formats and prints its arguments, after
the first, under control of the format. The format is a character string which contains three types of objects: plain characters,
which are simply copied to standard output, character escape
sequences which are converted and copied to the standard
output, and format specifications, each of which causes printing
of the next successive argument.

The arguments after the first are treated as strings if the
corresponding format is either c, b or s;otherwise it is evaluated
as a C constant, with the following extensions:

o A leading plus or minus sign is allowed.
o If the leading character is a single or double quote, the value is the ASCII code of the next character.

从上述 man page 内容可以看出:

  1. printf通过format字符串格式化输出其后的arguments
  2. format字符串包含三种类型对象: 普通字符串,该对象输出时会直接拷贝到标准输出STDOUT;字符转义序列,通过字符转义之后输出到标准输出;格式说明符,每一个格式说明符对应输出相应的argument
  3. 如果对应的格式指示符是%c/%b/%s时,相对应的参数都视为字符串,否则它们会被解释为C语言的数字常量: 在其开头可使用正负号标识;如果字符串开头是单引号'或者双引号",那么打印输出的值是紧跟着单引号或者双引号后的那个字符的ASCII
Continue reading

CaryaLiu

宅男一枚, 在前进的道路上.


iOS开发工程师


成都