由于对相同级别的Level实例来说,它必须是单例的,所以对序列化做了特殊处理,二者有因果关系? 5C

另外,由于对相同级别的Level实例来说,它必须是单例的,因而Log4J对序列化和反序列化做了一些处理。

即它的三个成员都是transient,真正序列化和反序列化的代码自己写,并且加入readResolve()方法的支持,以保证反序列化出来的相同级别的Level实例是相同的实例。
这样处理序列化和反序列化跟必须是单例的有什么关系?

 public boolean isGreaterOrEqual(Level level) {
      return this.level >= level.level;
  }
 public static Level toLevel(int level) {
      return toLevel(level, DEBUG);
  }
  public static Level toLevel(int level, Level defaultLevel) {
      switch(level) {
          case OFF_INT: return OFF;
          case FATAL_INT: return FATAL;
         case ERROR_INT: return ERROR;
         case WARN_INT: return WARN;
         case INFO_INT: return INFO;
         case DEBUG_INT: return DEBUG;
         case TRACE_INT: return TRACE;
         case ALL_INT: return ALL;
     }
     return defaultLevel;
 }

 private void readObject(final ObjectInputStream input) throws IOException, ClassNotFoundException {
      input.defaultReadObject();
     level = input.readInt();
     syslogEquivalent = input.readInt();
      levelStr = input.readUTF();
     if(levelStr == null) {
         levelStr = "";
     }
 }
 private void writeObject(final ObjectOutputStream output) throws IOException {
     output.defaultWriteObject();
     output.writeInt(level);
     output.writeInt(syslogEquivalent);
     output.writeUTF(levelStr);
 }
 private Object readResolve() throws ObjectStreamException {
     if(this.getClass() == Level.class) {
        return toLevel(level);
     }
     return this;
 }

0

1个回答

2
wuxinliulei
无心流泪 我就是从这个文章下看到的问题,单例需求和这个实现的因果关系是什么?
大约一年之前 回复
wuxinliulei
无心流泪 链接怎么失效了呢?
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
【单例深思】单例与序列化
在前面的文章中提到,序列化会破坏单例模式,下面用静态内部类的实现方式,说明序列化对单例的影响: public class Singleton implements Serializable{     private static class SingletonHolder {         private static final Singleton INSTANCE = ne
[求助]如何处理同级别的dom事件流?
在网上看到的事件流都是基于继承关系的,现在存在一个问题,同基本的dom节点如果存在遮挡,被遮挡的对象无法接收到事件rn1.B,D节点都在A里面,b,d与相对A做相对偏移rn2.其中B在D交叉,B在D上面,存在局部的遮挡rn3.点击B和D交叉的地方,B响应单击事件,D没相应单击事件rnrn现在有没有办法让我单击B与D交叉部分也能让D相应单击事件?
序列化与单例
[size=medium]当单例模式的类实现了系列化Serializable接口,也可以通过反序列化来使它不再单例。 我们的单例类:[/size] [code="java"] public final class Singleton implements Serializable{ private static final long serialVersionUID = 173577...
二者必须点击一个
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { int id = buttonView.getId(); View rootView = buttonView.getRootView(); AQuery aq = new AQuery(rootV
机器码对AX寄存器有特殊处理?
debug下观察opcode:rnrnMov [2000],dl 8816 10001000 00-010-110rnMov [4000],bx 891e 10001001 00-011-110rn按规则:rnMov [4000],ax 8906 10001001 00-000-110(但实际是:A30040)rn机器码对AX寄存器有特殊处理?rnrn
java 枚举单例 序列化单例
class Resource{}public enum SomeThing {    INSTANCE;    private Resource instance;    SomeThing() {        instance = new Resource();    }    public Resource getInstance() {        return instance;   ...
怎样制作:回收到,打印机,相同级别的文件?
怎样制作:回收到,打印机,相同级别的文件?
session.timeout是对个人来说的,还是对所有人来说的
就是说有一个人执行了session.timeout=30,是不是该网站上所有人的session的存活期都会是30rn还有这条语句,在session产生前用,各session产生后用是一样的吗?
新人求问有和c++primer plus 相同级别的做题练习册吗?有答案讲解的!
新人自学看的书是《c++ primer plus》,提到的各种库函数感觉好难记住,还有什么climits符号常量,什么setw,setfill等等感觉看到后面前面又忘记了,想坚持下去,也许多多做题就好了吧,rn 在此真诚求大神提供学习方法!
JAVA序列化/反序列化与单例
单例设计类: package com.test.singleton;      import java.io.IOException;   import java.io.ObjectStreamException;   import java.io.Serializable;         public class SingleTon implements Serializable{    ...
单例的序列化与反序列化
一:背景     单例在序列化时,仅仅实现序列化接口(implements Serializable)是没有用的,它在反序列化时,会每次都去创建一个新的实例。 二:如何解决     声明所有的实例域都是瞬时的(transient) ,且提供一个readResolve()方法。 三:测试代码      package com.eden.coreLearn.javacore;
序列化单例和类型安全的枚举
序列化单例和类型安全的枚举在序列化和反序列时,如果目标对象是唯一的,那么必须加倍小心,这通常会在实现单例和类型安全的枚举时发生。 如果你使用Java 语言的enum结构,那么你就不必担心序列化,它能够正常工作。但是,假设你在维护遗留代码,其中包含下面这样的枚举类型:
【Java】序列化与单例
之前明白了 线程安全且延迟加载的单例如何写,有两种,双重检验和静态内部类。然后为了防止反射破坏单例,在私有构造方法里面加入了一个同步变量的判断,确保构造方法只调用一次。但是仍然无法阻止序列化破坏单例,例子: package gggg; import java.io.FileInputStream; import java.io.FileNotFoundException; import jav
序列化-理解readResolve()
<br /><br />转自:http://blog.csdn.net/haydenwang8287/archive/2010/10/25/5964130.aspx<br />序列化是java中一个很常用而且很强大的功能。个人的看法,将java对象保存到磁盘,以后再从磁盘中读出来,这是java最常用到的功能之一。在基本的情况下,序列化能够“简单的起作用(just work)”。然而,随着越来越复杂的对象格式以及设计模式的被采用,透明的对象(transparent object)序列化可以“简单的起作用(ju
bootstrap不同级别的标题
Bootstrap和普通的HTML页面一样,定义标题都是使用标签到,只不过Bootstrap覆盖了其默认的样式,使用其在所有浏览器下显示的效果一样,具体定义的规则可以如下表所示: 通过比较可以发现,Bootstrap标题样式进行了以下显著的优化重置: 1、重新设置了margin-top和margin-bottom的值,  h1~h3重置后的值都是20px;h4~h6重置后的
不同级别的URL路径
当前网址是http://www.a.com/b/c/d?e=13#home1.书签级路径: #footer此路径将网址变为http://www.a.com/b/c/d?e=13#footer,只改变置顶div的位置,并不刷新页面。2.参数级路径: ?f=15此路径将网址变为http://www.a.com/b/c/d?f=15,页面刷新。3.文件级相对路径: f此路径将网址变为http://www...
008不同级别的配置
Go语言依靠其独步天下的并发能力,及其媲美C++的效率和Python般的简洁优美,天然就是开发Web应用的利器;rn本套教程系统介绍基于Go语言和Beego框架的Web应用开发流程;rn并手把手带你完成古诗词网站和博客网站两个实战案例的开发;
同级有层次优先级处理策略
同级有层次优先级处理策略Java类加载构造执行方法web应用js事件捕获机制事件冒泡机制 Java 类加载 classloader 传播 由祖到孙 构造执行方法 无参构造 传播 由祖到孙 web应用 拦截链 js 事件捕获机制 由祖到孙 事件冒泡机制 由孙到祖 ...
请问MFC中对WM_SIZE或WM_PAINT是否做了什么特殊的处理?(附实例)
.hrn[code=C/C++]class CMyApp:public CWinApprnrnpublic:rn virtual BOOL InitInstance();rn;rnclass CMainWindow:public CFrameWndrnrnprotected:rn BOOL m_bTracking;rn BOOL m_bCaptureEnabled;rn CPoint m_ptFrom;rn CPoint m_ptTo;rn HCURSOR m_hCursorArrow;rn HCURSOR m_hCursorIBeam;rn void InvertLine(CDC *pDC,CPoint ptFrom,CPoint ptTo);rnpublic:rn CMainWindow();rnprotected:rn afx_msg void OnLButtonDown(UINT nFlags,CPoint point);rn afx_msg void OnLButtonUp(UINT nFlags,CPoint point);rn afx_msg void OnMouseMove(UINT nFlags,CPoint point);rn afx_msg void OnNcLButtonDown(UINT nHitTest,CPoint point);rn afx_msg void OnSize(UINT nType,int cx,int cy);rn afx_msg BOOL OnSetCursor(CWnd* pWnd,UINT nHitTest,UINT message);rn DECLARE_MESSAGE_MAP()rn;rn[/code]rn.cpprn[code=C/C++]#include rn#include "MouseCap.h"rnrnCMyApp myApp;rnBOOL CMyApp::InitInstance()rnrn m_pMainWnd=new CMainWindow;rn m_pMainWnd->ShowWindow(m_nCmdShow);rn m_pMainWnd->UpdateWindow();rn return TRUE;rnrnBEGIN_MESSAGE_MAP(CMainWindow,CFrameWnd)rnON_WM_LBUTTONDOWN()rnON_WM_LBUTTONUP()rnON_WM_MOUSEMOVE()rnON_WM_NCLBUTTONDOWN()rnON_WM_SIZE()rnON_WM_SETCURSOR()rnEND_MESSAGE_MAP()rnrnCMainWindow::CMainWindow()rnrn m_hCursorArrow=::LoadCursor(NULL,IDC_ARROW);rn m_hCursorIBeam=::LoadCursor(NULL,IDC_IBEAM);rn m_bTracking=FALSE;rn m_bCaptureEnabled=TRUE;rn //Register a WNDCLASSrn CString strWndClass=AfxRegisterWndClass(0,AfxGetApp()->LoadStandardCursor(IDC_CROSS),(HBRUSH)(COLOR_WINDOW+1),AfxGetApp()->LoadStandardIcon(IDI_WINLOGO));rn //Create a windowrn Create(strWndClass,_T("Mouse Capture Demo(Capture Enabled)"));rnrnvoid CMainWindow::OnLButtonDown(UINT nFlags,CPoint point)rnrn m_ptFrom=point;rn m_ptTo=point;rn m_bTracking=TRUE;rn if(m_bCaptureEnabled)rn rn SetCapture();rn rnrnvoid CMainWindow::OnMouseMove(UINT nFlags,CPoint point)rnrn if(m_bTracking)rn rn CClientDC dc(this);rn InvertLine(&dc,m_ptFrom,m_ptTo);rn InvertLine(&dc,m_ptFrom,point);rn m_ptTo=point;rn rnrnvoid CMainWindow::OnLButtonUp(UINT nFlags,CPoint point)rnrn if(m_bTracking)rn rn m_bTracking=FALSE;rn if(GetCapture()==this)rn ::ReleaseCapture();rn CClientDC dc(this);rn InvertLine(&dc,m_ptFrom,m_ptTo);rn CPen pen(PS_SOLID,16,RGB(255,0,0));rn dc.SelectObject(&pen);rn dc.MoveTo(m_ptFrom);rn dc.LineTo(point);rn rnrnvoid CMainWindow::OnNcLButtonDown(UINT nHitTest,CPoint point)rnrn if(nHitTest==HTCAPTION)rn rn m_bCaptureEnabled=m_bCaptureEnabled?FALSE:TRUE;rn SetWindowText(m_bCaptureEnabled?_T("Mouse Capture Demo(Capture Enabled)"):_T("Mouse Capture Demo(Capture Disabled)"));rnrn rn CFrameWnd::OnNcLButtonDown(nHitTest,point);rnrnvoid CMainWindow::InvertLine(CDC *pDC,CPoint ptFrom,CPoint ptTo)rnrn int nOldMode=pDC->SetROP2(R2_NOT);rn pDC->MoveTo(ptFrom);rn pDC->LineTo(ptTo);rn pDC->SetROP2(nOldMode);rnrnvoid CMainWindow::OnSize(UINT nType,int cx,int cy)rnrn CFrameWnd::OnSize(nType,cx,cy);rnrnBOOL CMainWindow::OnSetCursor(CWnd *pWnd,UINT nHitTest,UINT message)rnrn if(nHitTest==HTCLIENT)rn rn DWORD dwPos=::GetMessagePos();rn CPoint point(LOWORD(dwPos),HIWORD(dwPos));rn ScreenToClient(&point);rn CRect rect;rn GetClientRect(&rect);rn ::SetCursor((point.y
JSR-133 因果关系
JSR-133java内存模型与线程规范中文版中第六节因果关系中有如下描述 “ 正确同步的,所以r1 == r2 ==0是唯一合法的行为 图6:happens-before允许的违规行为 图6中的代码是正确同步的。这看起来有点奇怪,因为里面没有执行任何同步动作。但是,记住,如果程序以顺序一致的方式执行时,没有数据争用,程序就是正确同步的。如果这个代码以顺序一致的方式执行,每个动作都将
不吝赐教--对大家来说较简单的循环处理!
请高手给个思路:(有示例更好)rnrn现在我有15个panel,我想通过查询 select a.name,a.codelength from 表 arn动态控制10个panel的with和caption:rn假设:recordcout casern 1:那么panel1.caption:=a.fieldbyname('name').asstring;rn 2:panel1.caption:=a.fieldbyname('name').asstring;//第1个namern panel2.caption:=a.fieldbyname('name').asstring;//第2个namern 3:rn panel1.caption:=a.fieldbyname('name').asstring;//第1个namern panel2.caption:=a.fieldbyname('name').asstring;//第2个namern panel3.caption:=a.fieldbyname('name').asstring;//第3个namern 4:rn panel1.caption:=a.fieldbyname('name').asstring;//第1个namern panel2.caption:=a.fieldbyname('name').asstring;//第2个namern panel3.caption:=a.fieldbyname('name').asstring;//第3个namern panel4.caption:=a.fieldbyname('name').asstring;//第4个namern.......rnrn请问我该咋个去循环处理呢?rnrnrnrnrnrn
==和===是有区别的
对于string,number等基础类型,==和===是有区别的,进行“数据类型”比较 Array,Object等高级类型,==和===是没有区别的,进行“指针地址”比较 JavaScript 是弱类型语言,这就意味着,等于操作符==会为了比较两个值而进行强制类型转换。 [code=&quot;javascript&quot;] var str = &quot;1&quot;; var numb = 1; str...
如何对不同级别的用户实现进入系统的控制????
现在我要做个机房管理系统,实现不同级别用户的登录系统,要输入卡号(机房发放的上机卡)进行登录,我想在上机人打开电脑的时候,用卡号登录代替系统登录的窗口,输入卡号登录系统,并在服务器上留下记录rn请问,用C#怎么实现这样的登录的?
大家对一些特殊的json数据源是怎么处理的?
数据库数据:rn[img=https://img-bbs.csdn.net/upload/201308/29/1377747217_415053.jpg][/img]rn根据ID和PID判断父节点。rnrn这是我想要的JSON数据源:rn[code=javascript]rnvar _menus=rn "menus":[rn rn "menuid":1,rn "icon":"icon-sys",rn "menuname":"注册数据",rn "menus":[rn rn "menuid":2,rn "icon":"icon-users",rn "menuname":"用户管理",rn "url":"/User/OperUser"rn ,rn rn "menuid":3,rn "icon":"icon-role",rn "menuname":"部门管理",rn "url":"/Department/OperDep"rn rn ]rn ,rn rn "menuid":4,rn "icon":"icon-sys",rn "menuname":"权限数据",rn "menus":[rn rn "menuid":5,rn "icon":"icon-users",rn "menuname":"用户管理",rn "url":"/User/OperUser"rn ,rn rn "menuid":6,rn "icon":"icon-role",rn "menuname":"部门管理",rn "url":"/Department/OperDep"rn rn ]rn rn ]rn;rn[/code]rnrn大家是如何处理这种JSON数据源,怎么查询自己造这种JSON数据格式。
对reorder level 有理解的朋友请进!!!
能给我说说什么是reorder level吗?还有它的作用!谢谢!(在POS系统中)
hive对有特殊值null的数据倾斜处理
hive对有特殊值null的数据倾斜处理
请问在序列化一个对象实例时,对该实例中的对象引用有多层引用的情况是如何处理的?
比如有一个组织结构对,包括了公司,部门,岗位,人员等对象,通过其中任一节点,都可以引用到整个组织结构中的任一节点。在序列化其中一个节点代表的对象实例时,它所包含的对象引用是如何处理的呢?类似于对象克隆(Clone)中的浅副本复制呢还是深副本复制?如果是处理所有嵌套的对象引用,那是不是相当于序列化其中任一节点,就保存了整个组织结构?
防止单例被序列化破坏
为什么会破坏 序列化的过程是通过ObjectOutputStream将类写入文件(序列化),通过ObjectInputStream将类序列化文件从硬盘读出生成一个对象。 在单例的序列化中,被反序列化的单例对象会通过显式或者默认的readObject方法去获取一个指向新的实例的引用INSTANCE,原理是利用反射构建了一个新的对象,所以私有构造器是没有用的,readObject方法等于是一个面向...
缓存Object(必须序列化)
public static final void saveObject(String path, Object saveObject) { FileOutputStream fos = null; ObjectOutputStream oos = null; File f = new File(path); if (f.isDirectory()) {
二者有何区别?
试请问一下在ASP中对ACCESS插入数据记录的两种方法有何区别:rn1.用INSERT INTO.....rn2.用RS.ADDNEWrn RS(字段名)="字段值"rn .rn .rn RS.UPDATErn另外:rn 我在ASP中使用了第二种方法,怎么不见数据库有反应呀?(即无记录增加啊)rn rn哪位仁义之义帮帮我?THS
nginx对客户端请求的特殊处理
下面介绍对客户端请求的特殊处理的配置项。 (1)忽略不合法的HTTP头部 语法:ignore_invalid_headers on | off; 默认:ignore_invalid_headers on; 配置块:http、server 如果将其设置为off,那么当出现不合法的HTTP头部时,Nginx会拒绝服务,并直接向用户发送400(Bad Request)错误。
让我震惊的SqlServer 对 ''特殊的处理
SqlServer 对'' 空串的处理
对您来说,是一个简单的问题
请看这段代码:rn String picture=rst.getString("path");rn width="10" height="10">rn 但是存的是绝对路径 ,如:e:\image rn 显示不出来,请问有什么办法显示出图片吗?
Servlet是单例的,关于单例....
//单例 ---- 单一实例 --- 有且仅有一个对象 // 饿汉式 : 一上来就创建对象,吃掉内存 class Student { private Student(){} private static Student stu = new Student(); public static Student getInstance(){ return stu; } //懒汉式:多...
由于序列化引起的错误,javax.el.PropertyNotFoundException
错误:javax.el.PropertyNotFoundException: Property 'uId' not found on type vo.UserInforn相关源码:rn rn rn $vo.uRealName rn rn我的想法:我觉得可能是因为我的vo.UserInfo这个类实现了序列化implements Serializable,因为我在别的代码处没有找到问题,而我的UserInfo类一定要实现序列化,请高人指点。。。谢谢
JavaScript 对json数据的处理-序列化与反序列化
JavaScript 对json数据的处理-序列化与反序列化 序列化 将json对象的状态信息转换为可以存储或传输的形式 JSON.stringify(param) ; 反序列化 将序列化的json数据转成对象 JSON.parse(param) ; ...
什么是Java序列化?为什么序列化?序列化有哪些方式?
        先普及一下,计算机中无法识别一个基本单元【字节】来表示,必须经过“翻译”才能让计算机理解人类的语言,这个翻译过程就是【编码】,通常所说的字符转换为字节。  有I/O的地方机就会涉及编码,现在几乎所有的应用程序都涉及网络I/O和磁盘I/O,而数据传输时都是以字节为单位的,所以所有的数据都必须能够序列化为字节。  什么是Java序列化?简单来说 序列化就是把Java对象储存在某一地方(...
用java原生接口Serializable实现对单例对象的序列化
单例类,也是将要序列化的类package test;import java.io.Serializable; import java.util.Date;/** * 定义一个可序列化的单例类,单例实现方法是静态内部类实现 同时为了在序列化后,再次反序列化获得对象还是单例模式。用readResolve方法 * 对于这个不是很懂。 * * @author cindy * */ public
对我来说有难度的SQL
date namern2010-12-01 15:20:12 arn2010-12-01 15:20:12 arn2010-12-03 15:20:12 brn2010-12-04 15:20:12 crnrnrndate countrn2010-12-01 2rn2010-12-02 0rn2010-12-03 1rn2010-12-04 1rn2010-12-05 0rn。。。 。。。rnrnrn要求 date为今年本月的日期,本月的天数要显示全,不能有遗漏。若某天没有数据用,其count为0;
有几个问题,对各位来说很简单的!!!
一,(1)创建一个包含下列数据的文件。rnH.Baker 614 Freeman St. Orange NJrnD.Rosso 83 Chambers St. Madison NJrnK.Tims 891 Ridgewood Rd. Millbum NJrnB.Williams 24 Tremont Ave. Brooklyn NYrn(2)编程:利用下列输出格式读取和显示(1)中创建的数据文件。rnName:rnAddress:rnCity,State: rnrn二,(1)存储下列数据到一个文件中。rn5 96 87 78 93 21 4 92 82 85 87 6 72 69 85 75 81 73rn(2)编程:计算并显示(1)中每组数字平均数。这些数据在文件中的排列方式是:表示每组数字数目的数字放在该组数字的前面。于是,这个文件中的第一个数字5表示接下来的5个数字将被分组在一起,数字4表示跟随的4个数字是一组,而6表示最后6个数字是一组。rnrn三,编一个C程序,读取和显示一个名为text.dat的文件中每隔一个字符的字符。
相关热词 c#串口测试应用程序 c# 匹配 正则表达式 c#防止窗体重绘 c#读写txt文件 c#挖地雷源代码 c#弹框选项 c# 移除 队列 c# 密码写入配置文件 c# 获取可用内存大小 c# 嵌入excel编辑

相似问题

2
AndroidStudio的gradle中没有gradle home 是怎么回事啊?
0
求问如何对这组数据用R语言进行离散化,并进行单因素方差分析.
1
springboot 配置多库之后,mybatis在控制台不打印sql语句了
1
Found one Java-level deadlock 这个严重吗?一直查不出问题在哪,什么导致的?该如何解决呢?求大神指点
2
mysql 多个join遇到笛卡尔积怎么办?
0
细菌的繁殖的一个推算的问题,怎么使用C语言的计算的方式怎么利用程序的代码编写来实现的
0
搭砖块的排列方式的问题,怎么采用C语言的程序的编写的设计的技术怎么实现这个排列组织的
1
为什么我创建一个已有的word 对象,添加段落时,如果有段落样式的时候就报错
0
特定降雨期间降雨量有多少根据给定的假设,怎么使用C语言的程序的编写的过程的代码有效地加以实现的
1
oracle 11.2.0.1版本数据库最近部署的环境数据库监听总断还无法自启;必须手动去启动服务
0
计算网格的值搜索问题,怎么采用C语言的程序的设计的编写的代码的格式的实现的过程
0
桥牌的花色的计算的问题,要求使用C语言的程序的编写的过程怎么用程序的代码来实现的呢
0
竖式的计算的公式的问题,怎么采用 C 语言的程序的编写的技术的代码设计的实现的方式是什么样的
0
django 在生产环境下,不能发送错误报告邮件
0
elasticSearch 查询之Aggs查询
1
C++调用C#接口,在gcnew C#类对象时,程序Crash
0
选择难度最小的路径的计算,怎么使用C语言的程序的设计的代码的编写去解决这个问题
0
如何才能选择最小难度的路径的计算,具体如何使用C语言的程序的设计的代码的编写去解决这个问题
0
51单片机写的M62429数字电位器程序有问题能帮忙查查吗?