Java的基本数据类型与流

Java函数式编程之【基本数据类型流】 流(Stream)通常是对象流(Stream<T>),本文主要介绍基本数据类型流(IntStream, LongStream 和 DoubleStream)。这三种基本数据类型流,虽然流的名称上用的是Int、Long、Double,好像是包装对象,实际上它们处理的是基本数据类型int、long和double的数据。 当把基本数据类型流转换为对象流(Stream<T>)我们常称这为流的装箱;反之则称为流的拆箱。 基本数据类型流是Java函数式编程中兼顾简洁性与性能的关键工具,对于大规模数值计算可明显提高性能 阅读详情
使用Java操作二进制文件和 使用Java操作文本文件两篇文章分别介绍了如何操作二进制文件和文本文件,事实上Java中还有基于Data的数据操作,这里的Data指的是Java的基本数据类型和String。基本数据类型包括byte、int、char、long、float、double、boolean和short。

    说到Java的基本数据类型必须谈到的两个类是DataInputStream和DataOutputStream。它们提供了对Java基本数据类型的操作,但是这些方法事实上是在两个重要的接口中定义的DataInput和DataOutput,它们的功能就是把二进制的字节流转换成Java的基本数据类型,同时还提供了从数据中使用UTF-8编码构建String的功能。有一个重要的类RandomAccessFile实现了DataInput和DataOutput两个接口使得他能够对文件同时进行写和读的操作。

    在DataInputStream和DataOutputStream两个类中的方法都很简单,基本结构为readXXXX()和writeXXXX()其中XXXX代表基本数据类型或者String。在这里不多讲述,不过值得一提的是我们有必要读读java中unicode的编码规则,在API doc中有比较详细的介绍。通常我们的对象有很多都是由java的基本数据类型构成的,比如一个人的信息包括姓名,电子信箱,电话号码和性别等。其实我们可以用DataInputStream中的方法和DataOutputStream中的方法按照一定的序列把数据写入流中再按照相同的序列把他们读取出来,这就是我们自己实现的序列化,这可以用在数据传输中,比如在J2ME联网程序中使用序列化机制传输数据。下面我们看看如何自己实现序列化,首先我们要有两个构造函数其中一个参数为空。
public Account()
    {

    }

    public Account(String userName, String email, int age, boolean gender)
    {
        this.userName = userName;
        this.email = email;
        this.age = age;
        this.gender = gender;
    }
当我们进行序列化的时候也很简单,我们只是往DataOutputStream中按照顺序写入对象的成员变量。例如
public void serialize(DataOutputStream dos) throws IOException
    {
        dos.writeUTF(userName);
        dos.writeUTF(email);
        dos.writeInt(age);
        dos.writeBoolean(gender);
       
    }
当我们进行反序列化的时候则按照相同的顺序从DataInputStream里面读取数据并赋值给成员变量。例如
    public static Account deserialize(DataInputStream dis) throws IOException
    {
        Account account = new Account();
        account.userName = dis.readUTF();
        account.email = dis.readUTF();
        account.age = dis.readInt();
        account.gender = dis.readBoolean();
      
        return account;
    }
为了便于调试我们还提供一个toString()的方法打印出对象的实际信息。这是个好的习惯。
    public String toString()
    {
        return "UserName = " + userName + " Email = " + email + " age = " + age
                + " gender = " + (gender ? "male" : "female");
    }

     为了测试序列化我们编写下面的程序进行测试,代码比较简单。

package com.j2medev.mingjava;

import java.io.*;


public class TestDataIO
{

    public static void main(String[] args) throws IOException
    {
        Account account = new Account("mingjava","eric.zhan@263.net",25,true);
        System.out.println("before serialization.........");
        System.out.println(account.toString());
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        DataOutputStream dos = new DataOutputStream(baos);
        account.serialize(dos);
        DataInputStream dis = new DataInputStream(new ByteArrayInputStream(baos.toByteArray()));
        Account sAccount = Account.deserialize(dis);
        System.out.println("after serialization..........");
        System.out.println(sAccount.toString());
        dos.close();
        dis.close();
    }
}

package com.j2medev.mingjava;

import java.io.*;

public class Account
{
    private String userName = "";
    private String email = "";
    private int age = 0;
    private boolean gender = false;

    public Account()
    {

    }

    public Account(String userName, String email, int age, boolean gender)
    {
        this.userName = userName;
        this.email = email;
        this.age = age;
        this.gender = gender;
    }

    public void serialize(DataOutputStream dos) throws IOException
    {
        dos.writeUTF(userName);
        dos.writeUTF(email);
        dos.writeInt(age);
        dos.writeBoolean(gender);
       
    }

    public static Account deserialize(DataInputStream dis) throws IOException
    {
        Account account = new Account();
        account.userName = dis.readUTF();
        account.email = dis.readUTF();
        account.age = dis.readInt();
        account.gender = dis.readBoolean();
      
        return account;
    }

    public String toString()
    {
        return "UserName = " + userName + " Email = " + email + " age = " + age
                + " gender = " + (gender ? "male" : "female");
    }
}
编译运行程序在控制台输出:
before serialization.........
UserName = mingjava Email = eric.zhan@263.net age = 25 gender = male
after serialization..........
UserName = mingjava Email = eric.zhan@263.net age = 25 gender = male
序列化成功,后面我将讲述如何在J2ME联网中使用序列化机制。

开源大模型推理GPU资源评估以及优化 随着大模型的火热很多项目中都使用到了开源大模型,这时候准确评估大模型的GPU资源非常重要,主要有下面几个方面:GPU是昂贵的资源。高估内存需求可能导致在硬件上的不必要支出,而低估则可能导致系统故障或性能下降。:适当的内存管理确保模型高效运行,能够更快地响应用户并处理更多并发请求。:随着需求的增长,理解内存需求对于在不牺牲性能或产生高昂成本的情况下扩展服务至关重要。尽管其重要性显而易见,但计算用于服务大型语言模型(LLM)的GPU内存并不简单。 阅读详情

相关推荐

Ubuntu登录界面黑屏?手把手教你排查和修复LightDM启动失败(附debug命令详解)

本文详细介绍了Ubuntu系统中LightDM(Light Display Manager)启动失败导致登录界面黑屏的排查与修复方法。通过系统状态检查、调试模式分析、常见故障解决方案及高级调试技巧,帮助用户快速定位并解决LightDM相关问题,恢复正常的图形登录环境。

weixin_34005090的博客 314

数据类型和序列化

内存和磁盘之间是频繁的进行数据的交换的。 序列化: 把内存中的对象以字节数组的形式写入磁盘中的过程,就叫做序列化 反序列化: 把磁盘中的字节数组转换成对象的形式写入内存的过程。 java中的序列化: Java中的序列化是比较重量级的序列化,不适用于海量数据的处理。 hadoop中的序列化 在java序列化基础上按照...

qq_43668119的博客 436

USB-Type-C PCB布局布线设计规范

USB Type-C连接器有24个引脚。图1和图2分别显示了USB Type-C插座和插头的插针。母头/母座公头/插头可以很明显看出,插口内的Pin功能相对于中心对称。公头插入母头,无论正反插,引脚功能都完美契合。而且电源VBUS/GND都拥有4个Pin,最大支持5A电流,在保证高速数据传输的同时也提高了电流承载能力。表 1 和表 2 分别汇总了在 USB Type-C 型插座和插头上所使用的信号列表。

weixin_63005522的博客 8271

Java各种数据类型序列化

对象序列化是一个用于将对象状态转换为字节流的过程,可以将其保存到磁盘文件中或通过网络发送到任何其他程序;从字节流创建对象的相反的过程称为反序列化。 可以理解为序列化是将数据转换成byte[]的表示方式。 对象序列化: 首先要实现Serializable接口 使用ObjectOutputStream序列化,返回byte[],使用ObjectInputStream反序列化byte[]为对象 fast...

p7+的博客 3154

ULN2003驱动28BYJ-48步进电机详解(附:51 32代码讲解)

本文介绍了28BYJ-48步进电机的驱动原理以及注意事项,并展示了极简 32 51驱动代码

qq_41818650的博客 1万+

(一篇即成功)Ubuntu下搭建qt环境和安装Qt Creator

只需一篇就成功搭建Ubuntu下的QT环境 你还在等什么

m0_73450461的博客 1万+

Java 中有哪些类型的流?

转换流是字符流和字节流之间的桥梁,它可以将字节流转换为字符流,也可以将字符流转换为字节流。InputStreamReader 将字节流转换为字符流,OutputStreamWriter 将字符流转换为字节流。转换流使用指定的字符集将字节流中的字节解码为字符,或将字符编码为指定的字节序列。字节流可以处理任何类型的数据,但是它们是以字节为单位进行操作的。字符流用于处理字符数据,它们是以字符为单位进行操作的。Java 中的流(Stream)分为两种类型:字节流和字符流。

weixin_44798281的博客 2203

NHANES数据库的介绍及使用(一)

一、数据库概况 NHANES(National Health and Nutrition Examination Survey)是一项旨在评估美国成人和儿童健康和营养状况的研究计划,计划始于20世纪60年代初期,是一项针对不同人群或健康主题的调查。 1999年该调查成为一项持续计划,涉及各种健康和营养测量,项目每年调查一个全国代表性的样本,约5000人,这些人群位于全国各县,每年对其中15个县进行访问。 NHANES访谈部分包括人口统计学、社会经济学、饮食和健康相关问题。体检部分包括生理测量、实验室检查等

Christina 5万+

JAVA--四大基本流

流是程序和设备之间嫁接起来用于数据传输的一根管道,该管道上有许多按钮用于实现不同的功能,而这根管道就是流。(流是可以实现输入输出的类,即流一定是类但类不一定是流)

weixin_65282950的博客 2285

Python 爬虫实战:Boss直聘 Python 岗位招聘数据爬取

本文介绍了一个Python爬虫项目,用于抓取Boss直聘平台的Python岗位招聘数据并进行可视化分析。项目采用requests库发送POST请求,通过抓包分析获取JSON接口,绕过HTML解析直接获取结构化数据。主要内容包括: 接口分析:找到关键POST接口,解析请求头和JSON参数格式 环境准备:安装requests/pandas/matplotlib/pyecharts等依赖库 核心实现: 手动获取登录Cookie 构建请求头和城市代码映射 实现分页抓取职位列表数据 项目特色在于直接解析JSON接口而

u014481728的博客 296

【数据同化第二期】数据同化中三大理论基础之一(最小方差估计)

【数据同化第二期】深入理解数据同化及经典案例(最小方差估计)

WW、forever的博客 1596

java中IO流详解

IO流作为java基础中的必备技能会常常被我们用到,本篇文章笔者就来具体讲述一下IO流,希望能对小伙伴们起到帮助作用,如有不当之处,欢迎补充。   一、什么是IO流 首先我们要明白什么是流?流是计算机用来传输文件、保存文件的一种方式。我们在开发中会经常用到IO流,如:文件的上传和下载,文件的复制等。根据流的方向,分为输入流和输出流。通常二者搭配使用完成文件上传和下载。输入流就是你要让计算机知...

莫离瑜的博客 821

某瓜数据app 获取达人直播商品信息接口 Sign

某瓜数据app 获取达人直播商品列表接口 Sign

自成背后的博客 6038

Java的基本数据类型流

Data流 /* * 基本数据类型流 Data流 * 是字节流的功能流 * 基本数据类型+String * DataInputStream 新增方法: readXxx() * DataOutputStream 新增方法: writeXxx() * *其中有一个异常:EOFException:文件存在,内容读取不到-->操作必须是源文件 * */ pu...

syf_519的博客 285

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

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

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java 操作基本数据类型的流

package io.p5.datastream; import java.io.DataInput; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.

Aseveng的博客 462

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java常用流类型_Java中基本数据类型与流

Java中基本数据类型与流更新时间:2006年10月13日 00:00:00 作者:Java中除了二进制文件和使用文本文件外还有基于Data的数据操作,这里的Data指的是Java的基本数据类型和String。基本数据类型包括byte、int、char、long、float、double、boolean和short。说到Java的基本数据类型必须谈到的两个类是DataInputStream和D...

weixin_40006763的博客 346

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

java IO流_其他流_基本数据类型处理流_基本数据类型+字符串(String)_练习

package IO流_其他流_基本数据类型处理流; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException;

weixin_45339692的博客 220

黑马程序员——Java基础——对象序列化、管道流、RandomAccessFile类、操作基本数据类型的流对象、字符编码

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、IO流——对象序列化 1、概述    IO流中的其他成员    ObjectInputStream 和 ObjectOutputStream   被操作的对象需要实现Seriali

lifeoflive521的专栏 659

Java中基本数据类型与流的操作方法

  Java中除了二进制文件和使用文本文件外还有基于Data的数据操作,这里的Data指的是Java的基本数据类型和String。基本数据类型包括byte、int、char、long、float、double、boolean和short。  说到Java的基本数据类型必须谈到的两个类是DataInputStream和DataOutputStream。它们提供了对Java基本数据类型的操作,但是这些

键者天行 5980

JAVA基础再回首(二十三)——操作基本数据类型的流、内存操作流、打印流、随机访问流、合并流、序列化流

JAVA基础再回首(二十三)——操作基本数据类型的流、内存操作流、打印流、随机访问流、合并流、序列化流 版权声明:转载必须注明本文转自程序员杜鹏程的博客:http://blog.youkuaiyun.com/m366917 有些日子没写博客了,当然这段时间也比较忙,大家见谅,好了,话不多说,开始学习吧。我们继续学习IO流,还有几个知识点没有学。操作基本数据类型的流 操作基本数据类型DataInputStre

aduroidpc's Blog 2281

Java的基本数据类型与流 (ZT)

Java中基于Data的数据操作,这里的Data指的是Java的基本数据类型和String。基本数据类型包括byte、int、char、long、float、double、boolean和short。     说到Java的基本数据类型必须谈到的两个类是DataInputStream和DataOutputStream。它们提供了对Java基本数据类型的操作,但是这些方法事实上是在两个重要的接口

vispper的专栏 825

java语言基础(82)——操作基本数据类型的流

java 中 DataInputStream 和 DataOutputStream 可以用来读写java中的基本数据类型,比如布尔值、字符、int值等。 示例如下: package DataInputOutputStreamDemo; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io

Don't lost way 478

Java过滤输入流_java IO操作与字节流(八)过滤流输入输出基本数据类型

过滤流输入输出基本数据类型:import java.io.*;public class Data {public static void main(String[] args)throws Exception{FileOutputStream f1=new FileOutputStream("1.txt");DataOutputStream d1=new DataOutputStream(f1);...

weixin_42396760的博客 276
上一篇: 使用Java操作文本文件
下一篇: J2ME对话-采访KVM之父AT
mingjava
博客等级 码龄24年 68粉丝 114原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值