问答

有些话、适合烂在心里 提交于 2020-11-20 05:04:26

开始下面的内容之前,这里先说一下吧,这篇文章是自己的第62篇输出文章,也是自己在写java基础性文章的最后一篇了,即自己理解的java基础性文章和想要写的基础性文章结束了,后面看自己如何去写接下来的文章了。


我觉得我需要写的基础性文章应该结束了,翻看了历史文章真正开始输出文章是在10月份初,那个时候觉得我要输出文章,我应该去做到日更,接下来面对最大的困难就是自己该要怎么去写?然后我就坚持了用自己的理解去按照自己写作风格进行来写了,写作风格就是配上示例程序加以易于理解的文字说明。


有的人或许会有这样的疑问,你在这期间想要放弃吗,是的,我想过放弃,我或许因为工作任务而焦虑不安,因为在每日工作下还要去思考我想要输出的技术点,完成一篇文章多则几个小时,少则也要一到两个小时,是的,我想要放弃,后面自己想想自己为啥要输出文章的初衷就坚持了这么久了,保持日更我做到了,至少目前我是做到了。


有的或许会有疑问,你在输出文章的这段期间有什么收获吗,是的,收获了很多,我学会了如何通过文字的形式将自己理解的进行输出成一篇篇文章来帮助自己和需要的人,同时,它也无形中帮助了我的工作等等吧。


接下来,你有什么打算,或许说你接下来想要输出什么样的文章,其实,自己没有刻意去想要写技术点,每篇文章出现在你面前之前我都会构思一个自己喜欢的点去写,所以不刻意去写文章。


或许日后更新文章不会那么频繁了,因为在这段写作文章的时间里自己觉得有点累,也确实累了,累的原因就是工作和写文章的双重压力,觉得我已经输出了这么多原创文章了,我已经形成了自己的写作风格,我没有必要这么拼。


曾说过工作是为了生活,若本末倒置,得不偿失,我其实多多少少会把生活和工作混到一起,至少目前是,这也是目前急需要解决掉的一个问题,最近在思考如何减压,无非就是觉得累了呗,尽快调整好自己,因为不想这样,时间长了人会焦虑的吧。


我不知道你们是不是这种状态,或许是,或许不是,想出去看看,看看外面的世界,使自己不再受限于当前的状态。


你觉得写文章期间有没有一点遗憾,觉得自己还可以做的更好,其实输出文章这段期间我不曾遗憾,因为每一篇文章都是自己喜欢写的。


好了,我们开始今天想要分享的内容了。


transient关键字是不是很少用到,是不是也很少见到,或许是,或许不是。


其实每篇文章的输出都是有原因的,好像是自己喜欢这个技术点,所以这篇文章我们看下transient关键字如何使用吧。


按以往的风格我们还是以示例程序进行讲述,在讲述之前我们看下我们项目需要依赖的jar,这里主要用到了lombok这个第三方库的使用,所以pom文件里面是下面的依赖。

<dependency>      <groupId>org.projectlombok</groupId>      <artifactId>lombok</artifactId>      <version>1.18.8</version></dependency>

首先,我们定义一个Person类,里面定义我们自己需要的类属性字段。

package com.wpw.springbootjdbc;
import lombok.AllArgsConstructor;import lombok.Builder;import lombok.Data;import lombok.NoArgsConstructor;import lombok.experimental.Accessors;
import java.io.Serializable;
@AllArgsConstructor@NoArgsConstructor@Data@Builder@Accessors(chain = true)public class Person implements Serializable {    private  Integer id;    private  String name; private Integer age;}

然后我们看下我们的主程序的代码实现逻辑,主要是为对象进行属性值的设置,然后通过文件流的操作进行保存在文本文件里,后面再通过反序列化的方式进行对象信息的读取。

package com.wpw.springbootjdbc;
import lombok.Cleanup;import lombok.extern.slf4j.Slf4j;
import java.io.*;
@Slf4jpublic class Test2 { public static void main(String[] args) throws IOException, ClassNotFoundException { Person person = new Person().setId(1).setName("微信公众号后端Coder").setAge(1); System.out.println("person = " + person); @Cleanup FileOutputStream fileOutputStream = new FileOutputStream("1.txt"); @Cleanup BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream); @Cleanup ObjectOutputStream objectOutputStream = new ObjectOutputStream(bufferedOutputStream); objectOutputStream.writeObject(person); objectOutputStream.flush(); System.out.println(); log.info("进行反序列化操作"); @Cleanup FileInputStream fileInputStream = new FileInputStream("1.txt"); @Cleanup BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream); @Cleanup ObjectInputStream objectInputStream = new ObjectInputStream(bufferedInputStream); Person person1 = (Person) objectInputStream.readObject(); System.out.println("person1 = " + person1); }}

首先我们看到在Person类里面没有使用关键字transient进行属性的修饰,后台日志输出的效果。

person = Person(id=1, name=微信公众号后端Coder, age=1)
[main] INFO com.wpw.springbootjdbc.Test2 - 进行反序列化操作person1 = Person(id=1, name=微信公众号后端Coder, age=1)

是不是和你平时写的程序没有什么两样,下面我们看下这个使用transient关键字修饰的字段经过序列化和反序列化后有什么不同吧。

package com.wpw.springbootjdbc;
import lombok.AllArgsConstructor;import lombok.Builder;import lombok.Data;import lombok.NoArgsConstructor;import lombok.experimental.Accessors;
import java.io.Serializable;
@AllArgsConstructor@NoArgsConstructor@Data@Builder@Accessors(chain = true)public class Person implements Serializable { private transient Integer id; private transient String name; private Integer age;}

同样执行下面的代码,然后看下日志有什么不同。

package com.wpw.springbootjdbc;
import lombok.Cleanup;import lombok.extern.slf4j.Slf4j;
import java.io.*;
@Slf4jpublic class Test2 {
public static void main(String[] args) throws IOException, ClassNotFoundException { Person person = new Person().setId(1).setName("微信公众号后端Coder").setAge(1); System.out.println("person = " + person); @Cleanup FileOutputStream fileOutputStream = new FileOutputStream("1.txt"); @Cleanup BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream); @Cleanup ObjectOutputStream objectOutputStream = new ObjectOutputStream(bufferedOutputStream); objectOutputStream.writeObject(person); objectOutputStream.flush(); System.out.println(); log.info("进行反序列化操作"); @Cleanup FileInputStream fileInputStream = new FileInputStream("1.txt"); @Cleanup BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream); @Cleanup ObjectInputStream objectInputStream = new ObjectInputStream(bufferedInputStream); Person person1 = (Person) objectInputStream.readObject(); System.out.println("person1 = " + person1); }}

我们看下控制台输出的日志信息,看看有什么不一样的吧。

person = Person(id=1, name=微信公众号后端Coder, age=1)
20:56:10.014 [main] INFO com.wpw.springbootjdbc.Test2 - 进行反序列化操作person1 = Person(id=null, name=null, age=1)

我们看到transient关键字修饰的字段没有值了吧,这就是transient的作用,我们可以定制化我们需要序列化和反序列化的字段信息。


好了,今天我们需要分享的内容到这里就结束了,喜欢文章的可以关注,留言。


本文分享自微信公众号 - WwpwW()。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!