随机流

简介: 随机流

总结于尚硅谷学习视频

一、介绍




二、RandomAccessFile的使用

1.RandomAccessFile直接继承与java.lang.Object类,实现了DataInput 和DataOutput接口

2.RandomAccessFile既可以作为一个输入流有可以作为一个输出流


3.如果RandomAccessFile 作为输出流时,写出到的文件如果不存在,则在执行的过程中自动创建

如果写出到的文件存在,则会对原有的文件内容进行覆盖。(默认情况下,从头覆盖)


4.可以根据相关操作,实现RandomAccessFile”插入“数据的效果

三、代码

RandomAccessFileTest 类

package com.day0317_2;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
/**
 * RandomAccessFile的使用
 * 1.RandomAccessFile直接继承与java.lang.Object类,实现了DataInput 和DataOutput接口
 * 2.RandomAccessFile既可以作为一个输入流有可以作为一个输出流
 *
 * 3.如果RandomAccessFile 作为输出流时,写出到的文件如果不存在,则在执行的过程中自动创建
 * 如果写出到的文件存在,则会对原有的文件内容进行覆盖。(默认情况下,从头覆盖)
 *
 * 4.可以根据相关操作,实现RandomAccessFile”插入“数据的效果
 */
public class RandomAccessFileTest {
    @Test
    public void test1() {
        RandomAccessFile raf1= null;
        RandomAccessFile raf2= null;
        try {
            //1
            raf1 = new RandomAccessFile(new File("图片.png"),"r");
            raf2 = new RandomAccessFile(new File("图片4.png"),"rw");
            //2
            byte[] buffer=new byte[1024];
            int len;
            while ((len=raf1.read(buffer))!=-1){
                raf2.write(buffer,0,len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //3
            if (raf1!=null)
                try {
                    raf1.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            if (raf2!=null)
                try {
                    raf2.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
    }
    @Test
    public void test2()throws IOException{
        RandomAccessFile raf1=new RandomAccessFile("hello6.txt","rw");
        raf1.seek(3);//将指针调到角标为3的位置
        raf1.write("xyz".getBytes());//
        raf1.close();
    }
    /*
    使用RandomAccessFile实现数据的插入效果
     */
    @Test
    public void test3()throws IOException{
        RandomAccessFile raf1=new RandomAccessFile("hello6.txt","rw");
        raf1.seek(3);//将指针调到角标为3的位置
        //保存指针3后面的所有数据到StringBuilder中
        StringBuilder builder=new StringBuilder((int) new File("hello.txt").length());
        byte[] buffer=new byte[20];
        int len;
        while ((len=raf1.read(buffer))!=-1){
            builder.append(new String(buffer,0,len));
        }
        //调回指针
        raf1.seek(3);
        raf1.writeBytes("xyz");
        //将StringBuilder中的数据写入到文件中
        raf1.write(builder.toString().getBytes());
        raf1.close();
    }
    //思考:将StringBuilder替换为ByteArrayOutputStream
}
相关文章
|
8月前
有汇源上下界最大流和最小流
有汇源上下界最大流和最小流
38 0
|
6月前
|
自然语言处理 算法 BI
|
Linux
44 # 流的原理
44 # 流的原理
71 0
|
算法 测试技术 C#
随机乱序图像
随机乱序图像
107 0
随机乱序图像
|
算法 安全 程序员
战斗要同步,又要有随机,怎么办?大佬告诉我这么做
在游戏开发中,有个需求就是在客户端的战斗行为需要在其他的客户端上进行同步播放,但是战斗中一些随机的技能,伤害等没办法同步,遇到这样的问题怎么办?是时候展现随机数的魅力。在开始战斗的时候从服务器获取一个随机种子,然后在不同的客户端用同一个种子进行随机,得到的随机数也会保持一致,完美的完成了策划的需求。
144 0
战斗要同步,又要有随机,怎么办?大佬告诉我这么做
|
机器学习/深度学习 Android开发 开发者
【Android 高性能音频】AAudio 音频流 PCM 采样 的 采样 缓冲 播放 的 连续机制 ( 数据回调机制 | 数据回调函数指针 | 实现数据回调函数 | 设置数据回调函数 )
【Android 高性能音频】AAudio 音频流 PCM 采样 的 采样 缓冲 播放 的 连续机制 ( 数据回调机制 | 数据回调函数指针 | 实现数据回调函数 | 设置数据回调函数 )
520 0
【Android 高性能音频】AAudio 音频流 PCM 采样 的 采样 缓冲 播放 的 连续机制 ( 数据回调机制 | 数据回调函数指针 | 实现数据回调函数 | 设置数据回调函数 )
|
Java
随机读写流
随机读写流
154 0
随机读写流
|
机器学习/深度学习 缓存
【计算机网络】数据链路层 : 选择重传协议 SR ( 帧分类 | “发送方“ 确认帧、超时事件 | “接受方“ 接收帧机制 | 滑动窗口长度 | 计算示例 )★
【计算机网络】数据链路层 : 选择重传协议 SR ( 帧分类 | “发送方“ 确认帧、超时事件 | “接受方“ 接收帧机制 | 滑动窗口长度 | 计算示例 )★
631 0
|
Android开发
【Android 高性能音频】AAudio 音频流 样本缓冲 相关配置 ( 通道数 | 样本格式 | 帧缓冲 | 采样率 | 每帧样本数 == 通道数 )(二)
【Android 高性能音频】AAudio 音频流 样本缓冲 相关配置 ( 通道数 | 样本格式 | 帧缓冲 | 采样率 | 每帧样本数 == 通道数 )(二)
565 0