`

化_列_序_反_和_化_列_序

阅读更多
1.序列化:把内存中正在运行的对象写到输出流中
  反序列化:从输入流中读取对象

2.需要被序列化操作的类必须实现:java.io.Serializable接口

3.通过transient关键字限制对属性的序列化
  private transient String passWord;

4.重写readObject()和writeObject()来控制序列化方式
  调用defaultReadObject()和defaultWriteObject()执行默认序列化操作
 
5.序列化前加密属性
  示例:
   //加密属性
   private byte[] change(byte[] buff){
      for(int i=0;i<buff.length;i++){
         int b = 0;
         for(int j=0;j<8;j++){
            int bit = (buff[i]>>j & 1)==0? 1 : 0;
            b+=(1<<j)*bit;
         }
         buff[i]=(byte)b;
      }
      return buff;
   }
   private void writeObject(ObjectOutputStream o)throw IOException{
      o.defaultWriteObject();//按默认方式序列化
      o.writeObject(change(passWord.getByte()));
   }
   private void readObject(ObjectOutputStream o)throw IOException{
      o.defaultReadObject();//按默认方式反序列化
       byte[] buff = (byte[])o.readObject();
       passWord = new String(change(buff));
   }
-------------------------------------------------------


public static void getSerializable() throws IOException,
ClassNotFoundException {
// 序列化
FileOutputStream fs = new FileOutputStream("D:\\a.serializable");
ObjectOutputStream ops = new ObjectOutputStream(fs);
String a = "Object-str";
Date date = new Date();
ops.writeObject(a);
ops.writeObject(date);
ops.close();

// 反序列化
FileInputStream fss = new FileInputStream("D:\\a.serializable");
ObjectInputStream is = new ObjectInputStream(fss);
String as = (String) is.readObject();
Date dates = (Date) is.readObject();
System.out.println(as);
System.out.println(dates);
}

public static void getInputStream() throws IOException {
// 输入流
InputStream is = new FileInputStream("D:\\in.txt");
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String data;
while ((data = br.readLine()) != null) {
System.out.println(data);
}
br.close();

// 输出流
OutputStream os = new FileOutputStream("D:\\out.txt");
OutputStreamWriter oss = new OutputStreamWriter(os);
PrintWriter pw = new PrintWriter(oss);
pw.println(data);
pw.close();
}
--------------------------------------------------------------
注册登录示例
public static boolean insertUser(UserInfo userInfo) throws IOException
    {
        boolean osBoolean = false;
        if (userInfo == null || userInfo.getUserName().isEmpty()
                || userInfo.getPassWord().isEmpty())
        {
            return osBoolean;
        }
        OutputStream os = new FileOutputStream("F:\\userInfo.xbliuc");
        ObjectOutputStream oos = new ObjectOutputStream(os);
       
        List<Map<String, String>> listUsers = new ArrayList<Map<String, String>>();
        Map<String, String> maps = new HashMap<String, String>();
        maps.put(userInfo.getUserName(), userInfo.getPassWord());
        listUsers.add(maps);
        if (listUsers.size() > 0)
        {
            oos.writeObject(listUsers);
            osBoolean = true;
        }
        oos.close();
        return osBoolean;
    }
    public static boolean enterUser(UserInfo userInfo) throws IOException,
            ClassNotFoundException
    {
        boolean isBoolean = false;
        if (userInfo == null || userInfo.getUserName().isEmpty()
                || userInfo.getPassWord().isEmpty())
        {
            return isBoolean;
        }
        InputStream is = new FileInputStream("F:\\userInfo.xbliuc");
        ObjectInputStream ois = new ObjectInputStream(is);
        List<Map<String, String>> lists = new ArrayList<Map<String, String>>();
        lists = (List<Map<String, String>>)ois.readObject();
        if (lists.size() > 0)
        {
            Map<String, String> maps = lists.get(0);
            if (userInfo.getPassWord().equals(maps.get(userInfo.getUserName())))
            {
                isBoolean = true;
            }
        }
        is.close();
        return isBoolean;
    }
    public static void Test() throws IOException, ClassNotFoundException
    {
        System.out.print(":");
        BufferedReader bra = new BufferedReader(
                new InputStreamReader(System.in));
        String a = bra.readLine();
        int b = Integer.parseInt(a);
        System.out.print(": ");
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String userName = br.readLine();
        System.out.print(":");
        BufferedReader br2 = new BufferedReader(
                new InputStreamReader(System.in));
        String passWord = br2.readLine();
        UserInfo userInfo = new UserInfo(userName, passWord);
        insertUser(userInfo);
        enterUser(userInfo);
    }

-----------------------------


/*******************************************************************************
* Copyright(c) 2005-2009 Huawei Tech. Co., Ltd.
* All rights reserved.
*
* Author: xbliuc
* Date  : 2010-12-19
*******************************************************************************/
package com.rt.io;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Date;

/**
* File InputStream
*/
public class InputStreamTest
{
   
    /**
     * TODO 添加方法注释
     * @param args
     * @throws IOException
     * @throws ClassNotFoundException
     */
    public static void main(String[] args) throws IOException,
            ClassNotFoundException
    {
        //getFileText();//字节输入流
        //getStringBufferStream();//字符输入流
        //copyFile();
        //copy();
        getSerializable();
    }
   
    /**
     * 对象序列化和反序列化
     * @throws IOException
     * @throws ClassNotFoundException
     * @throws FileNotFoundException
     * @throws ClassNotFoundException
     */
    public static void getSerializable() throws IOException,
            ClassNotFoundException
    {
        //创建保存序列化对象的文件
        ObjectOutputStream oOutput = new ObjectOutputStream(
                new FileOutputStream("D:\\ObjectFile.obj"));
        String oStr = "Object";
        Date odata = new Date();
        oOutput.writeObject(oStr);
        oOutput.writeObject(odata);
        oOutput.close();
       
        //反序列对象
        ObjectInputStream oInput = new ObjectInputStream(new FileInputStream(
                "D:\\ObjectFile.obj"));
        String str = (String)oInput.readObject();
        System.out.println("String : " + str);
        Date date = (Date)oInput.readObject();
        System.out.println("Date : " + date);
    }
   
    //把键盘输入的数据输出到控制台
    public static void copy() throws IOException
    {
        InputStreamReader a = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(a);
        String data;
        while ((data = br.readLine()) != null && data.length() != 0)
        {
            System.out.println(data);
            System.err.println(data);
        }
    }
   
    /**
     * 输入流种类
     * InputStream :字节输入流
     * OutputStream : 字节输出流
     * ByteArrayInputStream:字节数组输入流
     * FileInputStream : 文件输入流
     * StringBufferInputStream : 字符串输入流(StringReader)
     * SequenceInputStream : 顺序输入流
     * FilterInputStream : 过滤输入流
     * @throws IOException
     */
    public static void getFileText() throws IOException
    {
        final int SIZE = 1024;
        FileInputStream fs = null;
        FileOutputStream os = null;
        try
        {
            fs = new FileInputStream("D:\\a.txt");//输出字节流
            os = new FileOutputStream("D:\\b.txt");//输入字节流
           
            byte[] bytes = new byte[SIZE];//创建字节缓冲区
           
            int len = fs.read(bytes);//把a.txt文件中的数据读到bytes中
            while (len != -1)
            {
                os.write(bytes, 0, len);//把bytes中的数据写到b.txt中
                len = fs.read(bytes);//此时缓冲区bytes数组为空
            }
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
        finally
        {
            fs.close();
            os.close();
        }
    }
   
    /**
     * 字符串输入流示例
     * TODO 添加方法注释
     * @throws IOException
     */
    public static void getStringBufferStream() throws IOException
    {
        final String FORMAT = "GBK";
        InputStream input = new FileInputStream("D:\\aa.txt");
        InputStreamReader reader = new InputStreamReader(input);
        BufferedReader br = new BufferedReader(reader, 1024);
        String data = "";
        while ((data = br.readLine()) != null)
        {
            System.out.println(data);
        }
        br.close();
    }
   
    public static void copyFile() throws IOException
    {
        //编码格式,不添加此参数则按照本地平台的编码读取输入流中的字符
        final String FORMAT = "GBK";//UTF-8,
       
        //文件输入流
        InputStream in = new FileInputStream("D:\\aa.txt");
        //字符输入流
        InputStreamReader reader = new InputStreamReader(in, FORMAT);
        //带有缓冲区的字符输入流,提高文件读的效率
        BufferedReader br = new BufferedReader(reader);
       
        //文件输出流
        OutputStream output = new FileOutputStream("D:\\bb.txt");
        //字符输出流
        OutputStreamWriter write = new OutputStreamWriter(output, FORMAT);
        BufferedWriter bw = new BufferedWriter(write);
        //输入格式化数据
        PrintWriter pw = new PrintWriter(bw, true);
       
        String data;
        while ((data = br.readLine()) != null)
        {
            pw.println(data);//向目标逐行写数据
        }
        br.close();
        pw.close();
    }
}
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    pickle与struct模块简介

    `pickle`模块是Python标准库中的一个重要组成部分,主要用于实现Python对象的序列化和反序列化操作。序列化是指将对象的状态信息转换为可以存储或传输的形式的过程;而反序列化则是指将序列化后的数据恢复成对象的...

    vc++ 应用源码包_6

    OD反汇编引擎(带VC修改版和原版) 如题。主要文件就4个,非常适合学习,详细见源码。 OPENG开发的示例代码c++版 演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+technology文档。 ...

    vc++ 应用源码包_5

    OD反汇编引擎(带VC修改版和原版) 如题。主要文件就4个,非常适合学习,详细见源码。 OPENG开发的示例代码c++版 演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+technology文档。 ...

    vc++ 应用源码包_1

    OD反汇编引擎(带VC修改版和原版) 如题。主要文件就4个,非常适合学习,详细见源码。 OPENG开发的示例代码c++版 演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+technology文档。 ...

    vc++ 应用源码包_2

    OD反汇编引擎(带VC修改版和原版) 如题。主要文件就4个,非常适合学习,详细见源码。 OPENG开发的示例代码c++版 演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+technology文档。 ...

    数据结构(C++)有关练习题

    可以将要转换的数重复除以基数,然后讲除的余数按反方向排列来实现; 8、 已知A[n]为正数数组,试写出实现下列运算的递归算法; a. 求数组A中的最大整数; b. 求n个数的平均值; c. 求n个整数的平均值;...

    vc++ 应用源码包_3

    OD反汇编引擎(带VC修改版和原版) 如题。主要文件就4个,非常适合学习,详细见源码。 OPENG开发的示例代码c++版 演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+technology文档。 ...

    protobuf-net.unitypackage

    基 于 Unity 的 Protobuf 数 据 处 理 序 列 化 和 反 序 列 化 测 试 还 有 和 json 数 据 处 理 的 对 比

    Linux_unix_shell第一部分编程(共两部分)

    译者序 前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对模式 5 1.4.4 chmod命令的其他例子 6 1.4.5 可以...

    WinRAR_4.0.exe

    含文件掩码和以反斜线结尾,即使指定了 -r 开关,目录和子目录的所 有内容都会被添加到压缩文件中。 下面的命令会把 Bitmaps 目录和它的子目录中的所有文件添加到 RAR 压缩文件 Pictures.rar 中: rar a ...

    电力系统自动化实验指导书

    思考题涉及相序错误、电压互感器极性反接的影响,准同期与自同期并列的差异,以及合闸冲击电流的相关因素,旨在深化对电力系统并列操作的理解。 在实际操作中,必须遵循安全规定,如合闸时机的选择、按键的有效时间...

    hyperluminal-mem:通用Lisp的高性能序列化库

    速度:序列化和反序列化数据在单个CPU内核上的持续速率可以超过1GB / s。 安全:它可以用于不受信任且可能是恶意数据,例如从Internet接收到的序列化数据包或文件。 可移植性:序列化格式是可移植的。 它独立于...

    LINUX与UNIX_Shell编程指南

    译者序 前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对模式 5 1.4.4 chmod命令的其他例子 6 ...

    护网面试题总结+DD安全工程师笔试问题

    知识点:OWASP Top10 漏洞包括 SQL 注入、失效的身份认证、敏感数据泄露、XML 外部实体(XXE)、失效的访问控制、安全配置错误、跨站脚本(XSS)、不安全的反序列化、使用含有已知漏洞的组件、不足的日志记录和监控...

    LINUX与UNIX_Shell编程指南(上)

    译者序 前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对模式 5 1.4.4 chmod命令的其他例子 6 1.4.5 可以...

    基于51单片机的步进电机(正反转,加减速,启停,lcd)原理图、流程图、物料清单、仿真图、源代码

    每个脉冲使电机转过一个固定的角度,通过控制脉冲的数量、频率和相序,可以精确地控制电机的转动角度、速度和方向。 3. **步进电机控制**:控制步进电机的基本方法包括正反转、加减速和启停。正反转通过改变脉冲的...

    8255布进电机和键盘

    一旦按键按下,则启动步进电机,通过循环查表法按照预定的相序表进行电机的正反转控制。为了实现快速和慢速移动,程序中采用了不同的延时策略。 #### 键盘管理应用 **例4:8255A对非编码键盘的管理:** **硬件...

    AHP中新元素导入的强保序性条件 (2005年)

    文章提到的关键词包括层次分析法、正互反矩阵、强保序性、对数最小二乘法、列和求逆归一化方法等。层次分析法(AHP)是美国运筹学家托马斯·L·萨蒂(T.L.Saaty)在20世纪70年代提出的,旨在通过定性和定量的决策...

    特征集 计算机代数 吴-Ritt算法

    拟序具有反自反性、反对称性和传递性,偏序在此基础上增加了自反性,全序则要求所有元素两两可比较,而良序则是偏序集的子集在关系下都有最小元素。 在域的理论中,特征是描述域性质的重要属性。域是满足加、减、乘...

    Serializer:我的 C++ 类序列化器

    5. **验证**:在反序列化后,检查数据的有效性和完整性,以确保恢复的正确性。 在实际应用中,还需要考虑一些额外的问题,比如: - **版本控制**:当对象结构发生变化时,序列化库需要有能力处理旧版本的数据。 - *...

Global site tag (gtag.js) - Google Analytics