黑马程序员----IO包中工具类补充

本文深入探讨了使用ASP.NET、Android、iOS进行开发的技术要点,包括RandomAccessFile类的使用、多线程下载、DataInputStream和DataOutputStream的操作、字节数组流、字符编码、管道流、对象序列化存储方法等。同时,文章涉及.NET培训内容,期待与开发者深入交流。

ASP.Net+Android+IO开发S.Net培训、期待与您交流!

一、RandomAccessFile此类的实例对随机访问文件的读取和写入,内部分装了一个数组,而且通过指针对数组的元素进行操作。可以通过getFilePointer获取指针的位置, 同时以通过 seek改变指针的位置,其实内部封装了底层的字节输入输出流的操作
   但是根据构造函数可以知道该类只能操作硬盘上的文件,而且操作文件还有模式有“r”,"rw","rws","rwd"四中格式,其中“r”为只读文件此时会报异常IOException
   文件中可以写入特定类型的数据,如整形,UTF(String),Float,Double,Chars(也是写入String类型的数据),boolean等数据,同样提供了读取这些类型数据的方法
   该类提供了调整指针的方法:seek方法,这样我们可以通过调整指针的位置,获取特定位置上的数据
   该类有随机读写的功能,该对象的构造函数要操作的文件会自动创建,如果文件存在,则不会覆盖该文件,当向文件中写入数据时,则会将文件内容修改;如果文件的模式为只读“r”时,文件不存在时,构造函数不会去创建文件,而是报文件不存在异常,只有当文件存在时,才可以读取文件的内容
   多线程下载:随机读写访问类可以提供分段存取内容,这样我们可以将每一段作为一个线程来处理实现多线程下载
   一下为实例代码
   RandomAccessFile raf = new RandomAccessFile("aa.txt", "rw");//用一个文件定义一个可以读写的流对象
 raf.write("李四".getBytes());
 raf.writeInt(97);
 raf.write("王五".getBytes());
 raf.writeInt(98);
 raf.seek(8*2);//从开始位置往后跳过16个字节
 raf.write("龙龙".getBytes());
 raf.writeInt(68);
 raf.seek(8*3);
 raf.write("周期".getBytes());
 raf.writeInt(107);
 raf.close();
 
 RandomAccessFile raf = new RandomAccessFile("aa.txt", "r");//定义一个只读文件流,此时可能有文件不存在异常
   byte[] b = new byte[4];
   raf.seek(8*2);//跳过指定字节读取文件内容
   int i = raf.read(b);
   String name = new String(b,0,i);
   System.out.println(name);
   int age = raf.readInt();
   System.out.println(age);
  
二、DataInputStream和DataOutputStream
    可以用于操作基本数据类型的方法,使用流来构造该类的对象,同时注意如何向流中写入数据,就应该按该格式读取流中的数据,即我们用writeInt写入流,则应该用readInt读取内容;该类还提供了修改版的UTF-8的编码格式
 一下为操作代码
     将数据写入流
     DataOutputStream dos = new DataOutputStream(new FileOutputStream("in.txt"));
   dos.writeInt(123);
   dos.writeUTF("this is a test");
   dos.writeUTF("你好");
   dos.writeDouble(12.34);
   dos.close();
     将流中数据读取带控制台
     DataInputStream dis = new DataInputStream(new FileInputStream("in.txt"));
   System.out.println(dis.readInt());
   System.out.println(dis.readUTF());
   System.out.println(dis.readUTF());
   System.out.println(dis.readDouble());
   dis.close();
三、字节数组流对象ByteArrayInputStream和ByteArrayOutputStream(内存流)
    ByteArrayInputStream:在构造时,需要接受数据源,而且数据源是一个字节数组
 ByteArrayOutputStream:该对象内部已经封装了一个可变长度的字节数组。在定义时就不需要自定义了,而且这就是数据的目的地(这两个类操作的都是字节数组,并没有使用系统资源,因此不用进行关闭资源)
 // 定义源
 ByteArrayInputStream bais = new ByteArrayInputStream("acbdnshdjf".getBytes());
 //定义目的
 ByteArrayOutputStream baos = new ByteArrayOutputStream();
 int i = 0;
 while((i = bais.read())>0)
 {
  baos.write(i);
 }
 
 System.out.println(baos.size());
 System.out.println(baos.toString());
 还有CharArrayStream和StringReader的基本操作差不多,都是对内存中的数据进行的操作
四、字符编码:主要的编码有GBK,UTF-8,ISO8859-1
    其中前两种编码格式都是多字节编码,后一种为单字节编码;对中问的编码主要是GBK和UTF-8,我们该如何判断是那种编码的错误呢?
 根据老师的讲解我知道对于我们已知的文字出现乱码有两种格式,一种是单字节乱码即出现多个?号,一般?号的个数为我们要显示的汉字的倍数时,为单字节乱码,这时,我们应该讲该乱码再用ISO8859-1编码一次,从新用我们制定的编码格式去解码;第二种是宽字节乱码,如果解码以后出现的数据量大于已知数据量,但又不是?,只是是因为我们用utf-8编码,而用gbk来解码造成的问题,这种问题只能找到解码地方更改,而不能再编码,用原来的编码格式解码了;反之也相同
五、管道流,也是IO流中涉及到多线程的流 pipedStream
     如何将两个线程对象关联到一起,我们可以同过PipedInputStream的connect将PipedOutputStream关联到PipedInputStream的对象中去;用多线程来实现两个类的基本操作,见一篇
六、如何写对象,这里用一个序列化存储对象的方法ObjectInputStream类和ObjectOutputStream,但是类必须实现Serializable
      对于ObjectOutputStream对象应该刷新缓冲操作,该对象中有将对象写入内存中的方法我writeObject(Object obj):这个对象必须实现序列化接口,一旦写入,该对象就会序列化到文件中。这样就会在该类运行结束后,还可以在内存中获得该对象信息

ASP.Net+Android+IOS开发.Net培训、期待与您交流!

内容概要:本文介绍了一套针对智能穿戴设备的跑步/骑行轨迹记录系统实战方案,旨在解决传统运动APP存在的定位漂移、数据断层和路径分析单一等问题。系统基于北斗+GPS双模定位、惯性测量单元(IMU)和海拔传感器,实现高精度轨迹采集,并通过卡尔曼滤波算法修正定位误差,在信号弱环境下利用惯性导航补位,确保轨迹连续性。系统支持跑步与骑行两种场景的差异化功能,括实时轨迹记录、多维度路径分析(如配速、坡度、能耗)、数据可视化(地图标注、曲线图、3D回放)、异常提醒及智能优化建议,并可通过蓝牙/Wi-Fi同步数据至手机APP,支持社交分享与专业软件导出。技术架构涵盖硬件层、设备端与手机端软件层以及云端数据存储,强调低功耗设计与用户体验优化。经过实测验证,系统在定位精度、续航能力和场景识别准确率方面均达到预期指标,具备良好的实用性和扩展性。; 适合人群:具备一定嵌入式开发或移动应用开发经验,熟悉物联网、传感器融合与数据可视化的技术人员,尤其是从事智能穿戴设备、运动健康类产品研发的工程师和产品经理;也适合高校相关专业学生作为项目实践参考。; 使用场景及目标:① 开发高精度运动轨迹记录功能,解决GPS漂移与断点问题;② 实现跑步与骑行场景下的差异化数据分析与个性化反馈;③ 构建完整的“终端采集-手机展示-云端存储”系统闭环,支持社交互动与商业拓展;④ 掌握低功耗优化、多源数据融合、动态功耗调节等关键技术在穿戴设备中的落地应用。; 阅读建议:此资源以真实项目为导向,不仅提供详细的技术实现路径,还含硬件选型、测试验证与商业扩展思路,建议读者结合自身开发环境,逐步实现各模块功能,重点关注定位优化算法、功耗控制策略与跨平台数据同步机制的设计与调优。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值