Java中同时读写字符和字节

Amesim与Simulink联合仿真:S-Function接口配置与实战避坑指南 本文详细介绍了Amesim与Simulink联合仿真中S-Function接口的配置方法与实战避坑指南。从环境搭建、编译器配置到S-Function接口实战,逐步解析关键步骤与常见问题解决方案,帮助工程师高效实现多领域系统仿真,特别适合汽车、航空航天等复杂系统建模场景。 阅读详情

1、 说明

最近,遇到在同一个文件中读写将文字信息(字符)和数据(字节)两种分开的数据。在Java中读写文件要么使用字符流仅仅读写字符,要么使用字节流仅仅读写字节,或者使用字节转换流,将字节流转换为字符流,再读写文件。但是不存在,能同时读写字符和字节的流。

2、 思路

针对,同时读写字符和字节可以换一种思路,第一种方法是先将字符转换为字节,然后以字节流的方式读写;第二种方法是先将字节转换为字符,然后以字符流的方式读写;第三种方法是同时使用字节流和字符流读写文件;第四种方法是将字符和字节分开为两个文件,一个是头文件、另一个是数据文件。

3、实例

本文使用的是第一种方法,先将文字信息(字符)转换为字节,然后使用字节流读写文件。文字信息与数据之间添加3个“0XFF”字节作为分隔符,区分文字信息和数据。

例如向文件中写入以下信息: 

  字符数据:“ 姓名:袁先生, 性别:男, 年龄:68, 增益:6 , 疾病:心电疾病 风湿性心脏病”

  字节数据:两个初始化都是0的byte[25],设置第一个byte[25]中byte[0]=99,第二个byte[25]中byte[0]=98

最终文件中的数据是: {'name':'袁先生','sex':'男','age':68,'gain':6,'disease':['心电疾病','风湿性心脏病']}" 0XFF 0XFF 0XFF 1100011 00000000 …… 00000000  1100010  00000000 …… 00000000;

由于我写入的文件的数据字符数据比较少,而字节数据比较多,所以,我采用了先将字符转化为字节,然后,使用字节流写入到文件中,并且仪3个“0XFF”作为分隔符。

代码如下:

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.ArrayList;

 

public class Test {

       public static void main(String[] args) {

              Test test = new Test();

             

              // Write the file

              test.writeFile();

              // Read the file

              test.readFile();

       }

      

       public boolean writeFile() {

              File dirDat= new File("yong");             

              // The directory is exists

              if(!dirDat.exists()) {

                     if(!dirDat.mkdirs()) {

                            return false;

                     }

              }             

              String fileName= "yuan.dat";

              File saveFile = new File(dirDat, fileName);     

             

              String inforUserStr = "{'name':'袁先生','sex':'男','age':68,'gain':6,'disease':['心电疾病','风湿性心脏病']}";

              byte[] inforUserByte = inforUserStr.getBytes();

             

              //Output the data

              try {

                     FileOutputStream fosDat = new FileOutputStream(saveFile);

                    

                     // Write the information of user

                     fosDat.write(inforUserByte);

                    

                     // Write split identifier flag

                     byte[] flag = new byte[] {(byte) 0XFF,(byte) 0XFF,(byte) 0XFF};

                     fosDat.write(flag);             

                     // Write the data

                     byte[] data = new byte[25];

                     data[0] = 99;

                     fosDat.write(data);

                     data[0] = 98;

                     fosDat.write(data);                   

                     fosDat.close();

                    

                     // Set the file is read only

//                   saveFile.setReadOnly();

                    

               } catch (FileNotFoundException e) {

                      System.out.println("WriteDat, New FileOutputStream error !");

                      e.printStackTrace();

            } catch (IOException e) {

                  System.out.println("WriteDat, Close the FileOutputStream error !");

                  e.printStackTrace();

           }         

              return true;

       }

      

       public boolean readFile() {

              File dirDat= new File("yong");          

              // The directory is exists

              if(!dirDat.exists()) {

                     return false;

              }           

              String fileName= "yuan.txt";

              File saveFile = new File(dirDat, fileName);

              ArrayList<Byte> inforUserByteList = new ArrayList<Byte>();

              // The byte[25] is one point data

              byte[] pointData = new byte[25];

              // Read the data        

              try {

                     FileInputStream fisDat = new FileInputStream(saveFile);

                     boolean readFlag = true;

                     byte splitFlag = 0;

                     while(readFlag) {

                            // Get the user information

                            if(splitFlag < 3) {                                 

                                   // The byte use to find the split identifier flag

                                   byte inforUserByte = (byte) fisDat.read();

                                   // Add the information into the list

                                   inforUserByteList.add(inforUserByte);

                                   // Judge the split identifier flag

                                   if(inforUserByte == (byte)0XFF) {

                                          splitFlag = (byte) (splitFlag + 1);

                                   }else {

                                          splitFlag = 0;

                                   }

                            // Get the data

                            }else {

                                   if(fisDat.read(pointData) > 0) {

                                          System.out.println("数据:"+pointData[0]);

                                   }else {

                                          readFlag = false;

                                   }

                            }

                     }

              } catch (FileNotFoundException e) {

                     System.out.println("ReadDat, Establish the FileInputStream error !");

                     // TODO Auto-generated catch block

                     e.printStackTrace();

              } catch (IOException e) {

                     System.out.println("ReadDat, Read the FileInputStream error !");

                     // TODO Auto-generated catch block

                     e.printStackTrace();

              }         

              byte[] inforUserByte = (byte[]) new byte[inforUserByteList.size()];

              // Remove the flag, and transform the string

              for(int i=0; i<inforUserByteList.size()-3; i++){

                     inforUserByte[i] = inforUserByteList.get(i);

              }

              String inforUserStr = new String(inforUserByte);

              System.out.println(inforUserStr);

              return false;

       }

}

 

4、基于STM32 NUCLEO - F030R8开发板的嵌入式编程入门 本文详细介绍了如何在STM32 NUCLEO-F030R8开发板上实现LED闪烁功能,作为嵌入式编程的入门实践。内容涵盖开发板组成、跳线设置、项目创建、代码编写与解析、编译运行步骤,以及常见问题解决方法和拓展应用。通过本文学,习者可以掌握嵌入式开发的基本流程,并为后续深入学习打下基础。 阅读详情

相关推荐

RTDETR多模态融合实战:基于注意力机制的红外与可见光目标检测优化

本文深入探讨了基于RTDETR模型的红外与可见光多模态目标检测优化方案。针对复杂光照下的检测难题,文章提出并实战演示了如何利用注意力机制(如SimAM与交叉注意力)实现RGB与IR特征的智能动态融合,从而构建更鲁棒的“全天候”检测系统,有效提升安防、自动驾驶等场景在夜间及恶劣天气下的检测精度与可靠性。

weixin_29083373的博客 188

Java中字节流和字符流的区别

Java中字节流与字符流的区别

qq_53756844的博客 1044

SD - WAN:企业出海的网络加速器

例如,一家中国的跨境电商企业,在欧美市场的促销活动期间,借助 SD - WAN 技术,即使面对海量订单数据的交互,也能确保欧美客户在浏览商品、下单支付时感受到近乎本地网络的流畅体验,大大提升了客户满意度,稳住了销售增速。企业无需在海外本地部署大量冗余服务器,只需依托云台,借助 SD - WAN 快速稳定的网络连接,即可轻松实现业务拓展,进一步精简运营架构,提升整体效能。在未来,随着技术的不断演进和企业出海需求的持续增长,SD - WAN 将持续赋能,助力更多企业在全球市场扬帆远航,书写辉煌篇章。

idcicp_com的博客 446

java io边度边写_Java IO操作——字节流(OutputStream、InputStream)和字符流(Wri

学习目标 掌握流的概念 掌握字节流与字符流的作用 掌握文件的标准操作步骤 掌握字节与字符操作的区别 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序中需要数据的时候就用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使学习目标掌握流的概念掌握字节流与字符流的作用掌握文件的标准操作步骤掌握字节与字符操作的区别流的概念在程序中所有的数据都是以流的方式进行传输或保存的,程序中需...

weixin_35057726的博客 688

Oracle入门——基础语法篇

ROWID是Oracle中的一个伪列,用于唯一标识数据库中的每一行。在查询中,可以使用ROWID来定位和操作特定的行,例如,删除特定的行或更新特定的行。在Oracle中,子查询是指嵌套在另一个查询内部的查询语句,它可以作为主查询的一部分,用于提供额外的过滤条件、计算或数据源。在Oracle中,连接查询是通过使用JOIN子句将两个或多个表中的数据合并在一起,以获取满足特定条件的结果集。在Oracle数据库中,ROWID和ROWNUM都是用于对行进行标识和定位的伪列,它们在查询中的使用有一些不同之处。

麦当当的博客 3089

IEEE802.11bf: WLAN Sensing Standard

下表为IEEE802.11bf 定义的使用情境 (Use Cases)

qinsd19的博客 1056

字符流的读取与写入

public void fileReader(){ //创建Reader类 Reader re=null; BufferedReader bf=null; try { //读取文件 re=new FileReader("E:/ATM.txt"); //套接流,在一个流的基础上,再套接一个流,称为高级流 bf=new BufferedReader(re); String s=null; ...

bandenger的博客 409

RoCE Overlay

1. RoCE over vxlan 配置vxlan封装的RoCE流量,可以在PF switchdev模式下利用ovs bridge,或直接设置tc rules。下面将基于一对NIC互联的服务器介绍两种方式的使用,并分析封装后的数据包结构。 1.1. 基本配置 - VF与switchdev 首先创建VF,并为两个host设置PF的switchdev模式。使用ovs bridge或tc rules,...

sunshuying1010的博客 3063

JAVA读和写1

1. java中读和写(IO) java io可以让我们用标准的读写操作来完成对不同设备的读写数据工作. java将IO按照方向划分为输入与输出,参照点是我们写的程序. java使用输入输出的俩个方向来规定读和写操作. 输入:外界到我们写的程序的方向是获取过程,是【读取】操作.(用来读取数据的,是从外界到程序的方向,用于获取数据 ) 输出:则是发送到外界的方向,是【写出】操作(用来写出数据的,是从程序到外界的方向,用于发送数据. ) java将IO比喻为"流",即:stream. 就像生活..

Liamlf的博客 1444

【四足机器人项目实战】MIT四足机器人力控电机优劣分析及解决办法

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、mit力控电机方案二、弊端三、优点四、解决办法设计相关看专栏其他博客 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对XXX做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、mit力控电机方案 MITCheetahMini驱动器采用的电机是类似于公版电机T-MotorU8的型号

qq_35635374的博客 6090

【Ubuntu】RK3576 Linux 6.10 Ubuntu 22.04 系统中 HUSB311 Type-C 转 DP 显示输出与 Device/OTG 模式切换配置详解

本文详细介绍了在Rockchip RK3576开发板(Linux Kernel 6.10+Ubuntu 22.04)上配置HUSB311 Type-C控制器的设备树实现方案。主要内容包括:1)硬件连接与模块组成;2)设备树完整配置,涵盖Type-C供电、USB OTG/Host模式、DP显示输出等关键功能;3)软件配置步骤与常见问题排查方法。该方案实现了Type-C接口的DisplayPort AltMode显示输出、USB Device/Host模式自动切换等功能,为嵌入式系统Type-C接口开发提供参考

qq_34478161的博客 808

Java 字节流读写文件

Java:字节流读写文件 针对文件的读写,JDK专门提供了两个类,分别是 FileInputStream 和 FileOutputStream ,它们都是InputStream 的子类。 FileInputStream 是操作文件的字节输入流,专门用于读取文件中的数据。 例如: public class Example01 { public static void main(String[]...

涂涂写写的笔记 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Java IO教程 OutputStream InputStream 读写字节流

一、首先了解IO流的4个顶级的父类 1. 表格总结. 输入流 输出流 字节流 InputStream OutputStream 字符流 Reader Writer 二、先学习2个字节流InputStream和OutputStream 1.字符,字节,01进制的关系? ...

半亩方糖 5182

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

字节流和字符流到底怎么用

首先说明什么是流,流,可以想象为数据中的流水,水管里面流动的水,按顺序流出来。使用流进行数据文件的读写可以称之为流式读写,与之对比的是随机读写。流式读写也代表着顺序读写,比如一个word文档,只有按里面保存的数据顺序读出来才能还原里面的内容。你不可能先随便从某个字节开始读,一定是怎么存怎么读。因此对于一个流来说,如果想要获取文件中的第5个字节,那么你也只能先把前4个字节读出来,才能获取到第5个字节。对应的是随机读写就是可以从任意读取文件中的某一个位置的字节。 从字面意思上来理解,读取一个.mp4文件得用字节

qq_39286701的博客 1223

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java读取redis字节流_文件的字符流与字节流读写

文件字符流读写:FileWriter、FileReader文件字节流读写:FileInputStream、FileOutputStream//字符流写文件File file = new File("D:\\1.txt");if(!file.exists()){file.createNewFile();}BufferedWriter bw= new BufferedWriter(newFileWri...

weixin_39621044的博客 661

Java I/O(字节流、字符流与转换流)

**File类不支持文件内容处理,如果要处理文件内容,必须要通过流的操作模式来完成。流分为输入流和输出流。 在java.io包中,流分为两种:字节流与字符流: 字节流:InputStream、OutputStream 字符流:Reader、Writer** 字节流与字符流操作的本质区别只有一个:字节流是原生的操作,而字符流是经过处理后的操作。 在进行网络数据传输、磁盘数据保存所保存所支持的...

tt 博客 1万+

JAVA IO流:字节流、字符流、缓冲流

IO流:字节流、字符流、缓冲流IO流一、IO流概论二、字节流概论(一)FileOutputStream(二)FileInputStream三、字节缓冲流概论(一)BufferedOutputStream(二)BufferedInputStream四、字符流概论(一)编码表(二)OutputStreamWriter(三)InputStreamReader(四)字符流中的编码解码问题(五)FileWrite 与 FileReader五、字符缓冲流概述(一)BufferedWriter(二)BufferedRea

沉迷写代码的程序猿的博客 2006

java中的字节流和字符流

前言 字节流:分为字节输入流(InputStream)和字节输出流(OutputStream) 字符流:分为字符输入流(InputStreamReader)和字符输出流(OutputStreamWriter) 一、字节流 1.字节输入流(InputStream) 说明:字节输入流是读取外部文件的内容,输入到程序中,所以叫输入流,因为是按照字节为单位读取的所以叫字节输入流。 使用方式:创建流对象,并调用流对象的read方法从流中读取数据。 场景1)使用read(byte[] bytes)方法读取中文

qq_30237715的博客 1080

Java语言基础之文件读写

BufferedReader与BufferedWriter是文件读写缓冲区: 写文件: package Com.example.FileWriter; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOExceptio

小磊's blog 1123

java输入输出流、字符字节流

所有的程序都离不开信息的输入和输出。例如,从键盘读取数据、在网络上交换数据、打印报表、读写文件信息等,都要涉及数据输入输出的处理。在面向对象语言中,输入和输出都是通过数据流来实现的。在Java中,处理数据流的类主要被放在java.io包中 。 数据流的基本概念: 数据源(Data Sourcc):是指那些能够提供数据的地方,包括键盘、磁盘文件、网络接口等。 数据宿(Data Sink

fengdongkun的专栏 1万+

字节流、字符流

字节流和字符流的使用

yu的博客 2499

JAVA基础——字节流&字符流

方法名说明void write(int b)将指定的字节写入此文件输出流 一次写一个字节数据void write(byte[] b)将 b.length字节从指定的字节数组写入此文件输出流 一次写一个字节数组数据void write(byte[] b, int off, int len)将 len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流 一次写一个字节数组的部分数据方法说明FileInputStream(File file)通过打开与实际文件的连接来创建一个 FileInputStrea

weixin_64310048的博客 346

java字节流读取文件_字节流读取文件 java的几种IO流读取文件方式

java字节流怎么读取数据字节流读取数据例子如下: import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;/** * 复制文件 * @author young ...

weixin_42551028的博客 2593

Java学习笔记-字节流、字符流

字节流、字符流 主要内容 IO流 字节流 字符流 异常处理 Properties 第一章 IO概述 1.1 什么是IO 生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了ctrl+s ,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢?键盘、内存、硬盘、外接设备等等。 我们把这种数据的传输,可以看做是一种数据的流动,按照...

cyh0503的博客 2413

Java IO:简述字节流、字符流、缓冲流

Java IO:字节/字符输入输出流及缓冲输入输出流字节流字节输入流字节缓冲输入流字节输出流字节缓冲输出流字符流字符输入流字符缓冲输入流字符输出流字符缓冲输出流补充 Java的字节输入输出与字符的其实大同小异,区别主要在于一个是字节是字符,但是类比较多,本文主要就是整理一下我在学习过程中遇到的类。 字节流 字节输入流 各种字节输入流的含义如下 它们的常用方法有: 在这些输入流类中,比较常见的要属文件输入流FIleInputStream了 常用read(byte[])来以一个字节数组为单位的读取数

weixin_45836276的博客 497

字节缓冲流& 字符流

1. 字节缓冲流 1.1 字节缓冲流构造方法【应用】 字节缓冲流介绍 IBufferOutputStream:该类实现缓冲 输出流。通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用。 IBufferedlnputStream:创建BufferedInputStream将创建一个内部缓冲区数组。当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节 构造方法 方法名 说明 BufferOutputStre

JhonnyLee的博客 347
上一篇: 范数和距离的理解
下一篇: SurfaceView实现canvas中的图形上下滚动
MasonYyp
博客等级 码龄9年 301粉丝 297原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值