Java_IO文本对象操作流(ObjectOutputStream、ObjectOutputStream)与异常解决

对象操作流(ObjectInputStream,ObjectOutputStream ) 第1章 对象操作流   1.1 概述 用于从流中读取对象的 ObjectInputStream 称为 反序列化流,利用输入流从文件中读取对象 ObjectOutputStream 称为 序列化流,利用输出流向文件中写入对象 特点:用于操作对象。可以将对象写入到文件中,也可以从文件中读取对象。 /* * 对象操作流:可以用于读写任意类型的对象 * ObjectOutpu 阅读详情

IO文本_对象操作流

本文主要是在使用IO流做图书馆管理系统时通过将图书、读者等对象作为类对象,将其所定义的对象的属性 进行整体存取。本文主要对其中的ObjectInputStream、ObjectOutputStream学习与理解并通过一定的例子进行总结。



对象操作流

ObjectInputStreamObjectOutputStream
概念反序列化流序列化流
作用将之前使用 ObjectOutputStream 序列化的原始数据恢复为对象,以流的方式读取对象。把对象转成字节数据的输出到文件中保存,对象的输出过程称为序列化,可实现对象的持久存储。

一、ObjectOutputStream 序列化操作与异常解决

一个对象要想序列化,必须满足两个条件

① 该类必须实现 java.io.Serializable 接口。
( Serializable 是一个标记接口,不实现此接口的类将不会使任何状态序列化或反序列化,会抛出 NotSerializableException 的异常。)

import java.io.Serializable;

public static class Reader implements Serializable {
    public String name = null;
    public int age  =   0;
}

如上,上述的静态类没有实现任何方法,可看出来它是一个标记接口。
② 该类的所有属性必须是可序列化的。
(如果有一个属性不需要可序列化的,则该属性必须注明是瞬态的,使用transient 关键字修饰。)

【注】对象序列化本身就是一个主题。Java IO系列教程主要关注流、reader和writer,目前在网上已经有很多文章探讨了对象序列化,链接如下:http://java.sun.com/developer/technicalArticles/Programming/serialization/

-----------------举个栗子

/*自定义的对象输出流
**/
public class MyObjectOutputStream extends ObjectOutputStream {
    /**
     * 重写writeStreamHeader()方法
     */
    public MyObjectOutputStream(OutputStream out) throws IOException {
        super(out);
    }

    public void writeStreamHeader() throws IOException {
        return;
    }

    //序列化写入
    public static <T> void setFileObject(File file, T p) throws Exception {
        FileOutputStream fos = new FileOutputStream(file, true);//可追加写入
        ObjectOutputStream oos = new ObjectOutputStream(fos);//创建对象操作流
        oos.writeObject(p);//写入
        oos.close();//关闭流
    }

}

二、ObjectInputStream 反序列化操作与异常解决

【异常1抛出】对于JVM可以反序列化对象,它必须是能够找到class文件的类。如果找不到该类的class文件,则抛出一个ClassNotFoundException 异常。
【异常2抛出】当JVM反序列化对象时,能找到class文件,但是class文件在序列化对象之后发生了修改,那么反序列化操作也会失败,抛出一个 InvalidClassException 异常。

原因如下:
① 该类的序列版本号与从流中读取的类描述符的版本号不匹配
② 该类包含未知数据类型
③ 该类没有可访问的无参数构造方法

【注】除了实现Serializable接口外,用于序列化的类还应包含:

private static final long serialVersionUID=1200L;//值可自定

serialVersionUID的Java的对象序列化API使用该变量来确定反序列化的对象是否已使用相同版本的类进行序列化(写入),因为它现在正尝试对其进行反序列化。

想象一个Reader对象被序列化到磁盘上。然后对Reader集合进行更改。
之后,尝试反序列化存储的Reader对象。
现在,序列化的Reader对象可能与Reader该类的新版本不对应。
为了检测此类问题,实现的类Serializable应包含一个serialVersionUID字段。
如果对类进行了大的更改,则还应该更改其serialVersionUID的值。

解决方法:
① 修改本地的serialVersionUID为流中的serialVersionUID。
② 在当初实现Serializable接口时,就固定一个serialVersionUID,这样每次编译就不会自动生成一个新的serialVersionUID。
(白话说:只要有类implements Serializable,最好设置一个独特的 serialVersionUID )

//反序列化读出
    public static <T> List<T> getFileObject(File file) throws Exception {
        List<T> list = new ArrayList<T>();
        FileInputStream fis = new FileInputStream(file);
        ObjectInputStream ois = null;
//        判断是否存在
        if (file.exists()) {
            while (fis.available() > 0) {
//            每次都new一个新的ObjectInputStream:
                ois = new ObjectInputStream(fis);//解决StreamCorruptedException异常
                T p = (T) ois.readObject();
                list.add(p);
            }
            ois.close();
            return list;
        } else {
            System.out.println("不存在任何信息吖~");
            return list;
        }
    }

【注】java.io.StreamCorruptedException: invalid type code: AC 问题解决
1、运用集合:
在第一次序列化对象之前,把要序列化的对象添加到集合中,把这个集合序列化到文件中。然后每次序列化之前,除了把准备序列化的对象添加到集合中,再把已经序列化的集合反序列化回来添加到集合中,然后再把集合序列化到文件中。
2、重写ObjectOutputSream的writeStreamHeader()方法:
判断是不是第一次写入,若是则写入头部,若不是则不写入头部。
3:不重写ObjectOutputSream的writeStreamHeader()方法。
在反序列化的while循环中,每次都创建一个新的ObjectInputStream用来读取header。(本文即采取此措施)

上述栗子中方法的应用:

//    增加读者基本信息
    public void insertReaderInfo() throws Exception {

        System.out.println("#####读者相关信息。读者编号,姓名,出生日期,性别,联系电话,专业,读者类型(1、一类 2、二类 3、三类)。");
        Reader rm = scannerReaderInfo();    //键盘输入要插入的数据的方法,返回值是Reader对象。
        MyObjectOutputStream.setReader(readerfile, rm);      //写入数据到文件
       
    }

//    查询读者信息
    public void selectReaderInfo() throws Exception {
        readerfile = new File("src\\dell\\librarymanagementsystem\\data\\readerInfo.txt");
        readerslist = MyObjectOutputStream.getReader(readerfile);
//        查询所有用户
        System.out.println("^_^所有读者用户的信息为:");
        for (Reader readers : readerslist) {//循环输出
            System.out.println(readers);
        }
        System.out.println();
    }

【注】上述代码中 的 ois = new ObjectInputStream(fis);
这个虽然有时候会解决了StreamCorruptedException异常,但是如果要存入大量的数据时,会浪费很大的空间,降低代码的性能。写入文本的数据开始的时候会有一些头部流等额外信息,如果后续又重新写入一些,就会有一部分错误。因此,为了不浪费空间,也不出现写入后无法读取的异常等。
1、写入时就写入一个对象流,这个对象流是一个list集合,包含所有存储的对象。
2、读取时不每次都创建新的对象去读取,最终返回一个list集合。具体如下:

 while ((temp = (T) objectInputStream.readObject()) != null) {
                objects.add(temp);
 }

以上就是今天要讲的内容,本文仅仅简单介绍了使用IO对象操作流时会遇到的问题以及简单的使用吖,欢迎交流~

IO流-ObjectOutputStream-将对象写入到文件中 将 Java 对象的基本数据类型和图形写入 OutputStream,对象的默认序列化机制写入的内容是:对象的类,类签名,以及非瞬态和非静态字段的值 如下:将Person对象写入到文件中 package cn.itheima.cway.IO; import java.io.FileNotFoundException; import java.io.FileOutputStre 阅读详情

相关推荐

9.9元ESP32-C3开发板实战:手把手教你用VSCode搭建RT-Thread最小系统(附避坑指南)

本文提供了一份详尽的实战指南,教你如何在售价仅9.9元的ESP32-C3开发板上,使用VSCode搭建RT-Thread最小系统。内容涵盖从ESP-IDF环境配置、BSP源码获取、内核补丁应用到编译下载与调试的全流程,并重点分享了版本选择、补丁应用等关键避坑技巧,旨在帮助开发者低成本、高效地启动嵌入式实时操作系统开发。

o4p5q6r7s的博客 226

序列化流ObjectOutputStream、ObjectInputStream以及实现Java深克隆

详细介绍了Java序列化流ObjectOutputStream、ByteArrayInputStream,内存操作流ByteArrayOutputStream、ByteArrayInputStream,以及实现深克隆。

终生学习践行者 1404

Zabbix7.0实践:专线线路监控场景1

本文介绍了专线互联线路远程Ping监控的实现方案。针对运营商中间设备导致端口状态无法真实反映线路通断的问题,提出通过脚本执行端到端Ping检测的方案。具体实现包括:1)使用Expect脚本登录设备执行Ping测试并格式化结果;2)通过Shell脚本处理线路信息并生成JSON格式数据;3)配置Zabbix监控系统,创建自动发现规则和监控项原型,实现线路状态的自动监控。该方案适用于专线数量不多但重要的场景,能够有效检测中间有运营商设备的专线线路通断状态,最终在Zabbix中实现可视化的告警展示。

2301_80016499的博客 781

java.io.StreamCorruptedException: invalid type code: 31

A user-settable boolean to determine whether ClassLoader.loadClass should accept array syntax. This value may be changed during VM initialization via the system property "sun.lang.ClassLoader.allow...

sliar no ybur 289

别再手动连线了!用Tessent IJTAG的SIB和TDR,5分钟搞定复杂芯片的DFT网络分区

本文探讨了如何利用Tessent IJTAG的SIB(Segment Insertion Bit)和TDR(Test Data Register)技术,高效解决复杂芯片DFT网络分区问题。通过智能化的扫描链管理和声明式定义,显著降低连接复杂度,提升测试覆盖率和良率,适用于超大规模SoC设计。

weixin_29251131的博客 300

清华数据结构列车调度AC100分

两种思路(1)将目标栈的数据和待混洗的数据逐个进行比较#pragma warning(disable:4996) #include&lt;stdio.h&gt; #include&lt;string.h&gt; #define maxn 1600005 using namespace std; char a[2*maxn][5];//记录操作命令 int stack[maxn]; char pop...

hgtjcxy的博客 924

Java使用ObjectOutputStream和ObjectInputStream序列号对象报java.io.EOFException异常的解决方法

版权声明:本文为【欧阳鹏】原创文章,欢迎转载,转载请注明出处! 【http://blog.csdn.net/ouyang_peng】

qq_33334482的博客 899

基于DSP28335的Matlab/Simulink代码生成实验七:A/D采样

实验七:讲解如何使用DSP的ADC模块,通过代码生成技术控制DSP进行电流采样,是后续实现电机闭环控制的重要环节。通过简单的实验来熟悉代码生成的过程。最终实现复杂算法代码自动生成,进行高性能电机控制!

m0_73869369的博客 4724

对象输出流 ObjectOutputStream java

对象输出流 ObjectOutputStream java 构造方法 protected ObjectOutputStream() 为完全重新实现 ObjectOutputStream 的子类提供一种方法,让它不必分配仅由 ObjectOutputStream 的实现使用的私有数据。 ObjectOutputStream(OutputStream out) 创建写入指定 OutputStream 的 ObjectOutputStream。 方法摘要

pyhui的技术博客 6097

Python爬虫技术:使用Playwright和Twitter API v2高效获取Twitter/X数据完全教程

遵守规则:始终遵循Twitter的使用条款和速率限制错误处理:实现完善的错误处理和重试机制数据质量:进行数据清洗和验证性能优化:使用异步处理和合理的延迟设置可维护性:模块化代码,便于维护和扩展。

2201_76125261的博客 671

uniapp:安卓苹果APP判断是否授权开启手机位置服务+弹框引导跳转到用户手机设置位置服务开启页面,uniApp app判断是否授权位置信息权限如果位置是关闭状态则提示用户(跳转各机型位置设置页面)

uniapp APP判断是否开启位置信息服务&&判断是否授权位置信息权限,uniappapp定位权限被拒绝后,询问是否开启授权并跳转到手机设置页面,uniapp APP端 定位未授权 去手机设置里开启定位,uniapp提示用户开启定位,跳转到开启定位页面,uniapp获取当前位置及检测授权状态,uniapp中获取位置信息处理,uni-app实现定位功能_uniapp获取定位位置信息,uniapp中app是否开启定位,app获取地理位置,uniapp打开位置权限设置页面IOS,用户并没有开启微信信息服务或者没

✅ 精选推荐文章 4342

解决 java.io.StreamCorruptedException: invalid type code: AC 异常

通过自定义的类 AppendOutputStream 继承自 ObjectOutputStream, 并且重写了父类的 writeStreamHeader() 方法以保证文件中只存在一个 StreamHeader,从而 java.io.StreamCorruptedException: invalid type code: AC 异常抛出问题得到解决。

春天熊的技术博客 8045

YOLOv12改进策略【Neck】| CGA Fusion:内容引导的注意力融合模块,空间权重引导的多模态特征自适应融合

本文记录的是利用CGA Fusion 模块改进 YOLOv12 的多模态融合部分。(Content-Guided Attention Fusion)通过内容引导注意力生成空间权重,引导高低层特征的自适应融合。本文利用模块,通过内容引导注意力生成空间权重,自适应地融合两个模态的特征,在特征融合阶段实现跨模态语义对齐与噪声抑制,增强对不同模态互补特征的利用能力,从而提升模型在多模态场景下的检测鲁棒性与准确性。DEA-Net: Single image dehazing based on detail-enhan

Limiiiing的博客 433

对象操作流ObjectOutputStream

1.什么是对象操作流 该流可以将一个对象写出,或者读取一个对象到程序中,也就是执行了序列化和反序列化操作。 2.使用方式 前提:需要被序列化和反序列化的类必须实现Serializable 接口。 将对象写出到硬盘上的某个文件里: 创建类Student,并实现Serializable 接口: package demo; import java.io.Serializable; publ...

cc1969281777的博客 1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

[对象的IO流]java对象通过 ObjectOutputStream转成字节流,通过ObjectInputStream还原举例

初学java,学到IO流,我们能经常看到的是一个String类型转化成Byte数组,然后将其还原成String类型;后面就在想对象怎么转成字节数组再还原呢?于是在找资料过程发现了ObjectOutputStream这个对象输出流,可以实现对象的IO;当然,这可能知识java对象的其中一种IO方式,下面是例子: import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExcept

i_wavelet的博客 1902

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java IO 读取类对象的流 ObjectInputStream,ObjectOutputStream 使用教程.

一、读取类对象的流 ObjectInputStream,ObjectOutputStream 可以将 对象的实例序列化,和反序列化(不懂没关系看代码) 二、练习 1.要求:储存一个实例化的CriminalSuspect 嫌疑人对象 到txt文件,然后读取出来. 2.分析: 读取类对象的流 ObjectInputStream,ObjectOutputStream 一、作用 : 对象IO流可以储存和取出对象的序列, 要求 对象必须实现接口 序列化接口 Serializable接口 二、使用方法 1.构造 ne

半亩方糖 2173

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【Java I/O 流】对象流:ObjectInputStream 和 ObjectOutputStream

对象流有两个类:ObjectOutputStream 和 ObjectInputStream,其主要作用是将 Java 对象序列化为流数据,或将流数据反序列化为 Java 对象。

水滴的博客 2656

IO流详解

文章目录IO流IO流分类FileInputStream IO流 IO流分类 - <font color=blue >以内存为参照物 - 往内存中去,输入流,读 - 从内存中出,输出流,写 - <font color=blue >读取方式不同 - 按照字节读取数据,一次读取一个字节byte,相当于8个二进制位。这类流的读取方式是万能的,什么类型的文件都可以读取:文本文件、图片、声音文件、视频 - 按照字符读取数据,一次读取一个字符,这种流是为了方便读取普通文本而存在的。这种流

Tower_SHR的博客 4434

对象序列化流与对象反序列化流(ObjectOutputStream,ObjectInputStream)

对象序列化:就是将对象保存到磁盘中,或者在网络中传输对象 这种机制就是使用一个字节序列表示一个对象,该字节序列包含:对象的类型、对象的数据和对象中存储的属性等信息 字节序列写到文件后,相当于文件中持久保存了一个对昂的信息 反之。该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化 要实现序列化与反序列化,就要使用对象序列化流和对象反序列化流: 对象序列化流:ObjectOutputStream 对象反序列化流:ObjectInputStream 对象序列化流:ObjectOu.

林高禄 1万+

【Java之IO流】

以内存为参照物。

bigcoding的博客 904

java中的IO流详解

(2).read:每次读取单个字符,返回该字符,到文件末尾返回-1(3).read(char[]):批量读取多个字符到数组,返回读取到的字符数,如果到文件末尾返回-1字符数组转化为字符串 ​​​​@Testint data=0;try {//循环读取,使用read,单个字符读取=-1){=null){try {@Testtry {//循环读取,使用read(buf),返回实际读取到的字符个数=-1){

2302_80274319的博客 1286

Java objectOutputStream的用法

ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream 读取(重构)对象。通过在流中使用文件可以实现对象的持久存储。如果流是网络套接字流,则可以在另一台主机上或另一个进程中重构对象。 只能将支持 java.io.Serializable 接口的对象写入流中。每个 serializable 对象的

超宇的博客 3万+

Java中的ObjectOutputStream –将对象写入文件

ObjectOutputStream in Java can be used to convert an object to OutputStream. The process of converting object to stream is called serialization in java. Java中的ObjectOutputStream可用于将对象转换为OutputStream。 ...

从零开始的教程世界 6050

java基础之IO流1

自定义类必须实现Serializable接口,表示允许被序列化,否则IO流没有读写权限序列化:拆分对象信息的过程反序列化:通过信息组装对象的过程将属性通过transient修饰符修饰则可以防止其参与序列化如果对象中有自定义类型的属性,则必须使该属性类型也实现序列化接口或者通过transient修饰符对其修饰​​//防止被序列化//省略getter、setter、构造、toString​​​​try (//输出流//输入流​) {//先写//后读。

zhzjn的博客 1304

java 中 IO 流有哪些?

java 中 IO 流有哪些? 按数据流向:输入流和输出流 输入和输出都是从程序的角度来说的。输入流:数据流向程序;输出流:数据从程序流出。 按处理单位:字节流和字符流 字节流:一次读入或读出是8位二进制;字符流:一次读入或读出是16位二进制。 JDK中后缀是Stream是字节流;后缀是Reader,Writer是字符流。 按功能功能:节点流和处理...

ConstXiong 1万+
上一篇: Java_泛型_总结
下一篇: Java_图书管理系统_总结1
葡萄籽-June
博客等级 码龄7年 37粉丝 42原创
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值