网络流和数据流

2023-10-31

1.流的本质为基本类型数组

2.网络流和数据流都是读某个文件路径,形成编码,再解析出来

short x = arr[i]<<8+arr[i+1]        char w = (char)x

char\int\short\long都可以存视频流、音频流等

3.文件流:基本数据类型数组拼接起来

(例:C语言中

char[ ] arr 为一个文件流,char在C中为8比特,UTF-32为32位表示一个字符

arr[i]<<24+arr[i+1]<<16+arr[i+2]<<8+arr[i+3]拼接成UTF-32,在编码库中查询,将各种基本类型转化为char文件解析出来生成符号

        文件形成编码时需要在头部标注出是什么编码以及文件总大小(字节数,文件总大小的表示数一般为32位)

4.数据流转成文件操作系统有专门的方法,把byte数组变成二进制数据存下来到硬盘上,对这块数据显示为有效,文件中有这块地址,把数读出来重新变为基本数据类型编码,显示出来

5.网络流通过高低电压传输,我们接收的时候也是用基本数据类型

6.文件流:文件的存取

        ①、字节输出流(文件字节流)

 

public class FOSWriterStream {
//将数据写入文件
    public static void main(String[] args) throws IOException {
        // 使用文件名称创建流对象,构造函数中的 true 表示在原有数据末尾追加续写
        FileOutputStream fos = new FileOutputStream("fos.txt", true);

        // 1、逐个字节写出
        fos.write(97); // 97 的 ascll 码是 a
        fos.write(98); // 98 的 ascll 码是 b
        fos.write(99); // 99 的 ascll 码是 c

        // 2、写出一个换行, 换行符号转成数组写出
        fos.write("\r\n".getBytes());

        // 字符串转换为字节数组
        byte[] b = "一个优秀的废人".getBytes();
        // 3、写出字节数组数据
        fos.write(b);

        // 4、写出指定长度字节数组数据(不可超过 b 的长度,否则数组越界)
        fos.write(b, 0, b.length);

        // 关闭资源
        fos.close();
    }

}

        ②、字节输入流(文件字节流)

 

public class FISReadStream {
//将数据从文件中读出
    public static void main(String[] args) throws IOException {
        // 1、逐个读取字节
        int b;
        FileInputStream fis1 = new FileInputStream("fis.txt");
        // 循环读取
        while ((b = fis1.read())!=-1) {
            System.out.println((char)b);
        }
        // 关闭资源
        fis1.close();

        System.out.println("----华丽丽的分割线----");

        // 2、定义字节数组读取
        int length;
        FileInputStream fis2 = new FileInputStream("fis.txt");
        // 定义字节数组,作为装字节数据的容器
        byte[] bytes = new byte[1024];
        // 循环读取
        while ((length = fis2.read(bytes))!=-1) {
            // 每次读取后,把数组变成字符串打印
            System.out.println(new String(bytes, 0, length));
        }
        // 关闭资源
        fis2.close();
    }

}

        ③、复制文件

public class FileCopyStream {
//复制文件
    public static void main(String[] args) throws IOException {

        // 指定数据源
        FileInputStream fis = new FileInputStream("Java IO 流.png");
        // 指定目的地
        FileOutputStream fos = new FileOutputStream("流.png");

        // 定义数组
        byte[] b = new byte[1024];
        // 定义长度
        int len;
        // 循环读取
        while ((len = fis.read(b))!=-1) {
            // 写出数据
            fos.write(b, 0 , len);
        }

        // 关闭资源,后开先关,后开先关
        fos.close();
        fis.close();
    }

}

                ④、文件字符流

7.网络流:socket的存取

        所有网络收发都是socket。socket是一个类,专门用来收发,需要指定端口

        ①、服务端

public class server {//服务端
    public static void main(String[] args){
        //从服务端接收数据
        try{
            ServerSocket server = new ServerSocket(8089);
            Socket socket = server.accept();
            Reader reader = new InputStreamReader(socket.getInputStream());
            char[] chars = new char[1024];
            int len;
            StringBuilder builder = new StringBuilder();
            while ((len=reader.read(chars)) != -1) {
                builder.append(new String(chars, 0, len));
            }
            System.out.println("Receive from client message=: " + builder);
            reader.close();
            socket.close();
            server.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

          ②、客户端

public class client {//客户端
    public static void main(String[] args){
        try {
            //向服务端发送数据
            Socket socket = new Socket("127.0.0.1",8089);
            Writer writer = new OutputStreamWriter(socket.getOutputStream());
            writer.write("Hello From Client");
            //它用于将缓冲区中的数据强制刷新到目标流中,确保数据已经被写入到磁盘或其他持久化设备中,并释放相应的缓冲区。
            writer.flush();
            writer.close();
            socket.close();

        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网络流和数据流 的相关文章

随机推荐

  • 01背包问题中两个背包的解法

    问题描述大致如下 给你n个物品 两个背包 如何装包可以使得两个背包得到的价值是最大的 一个简化问题 来自微软的笔试题 题目大意 有两条生产线 一条可以工作x小时 一条工作y小时 一个数组表示每种汽车生产需要多久 要求最多生产多少种汽车 解析
  • 《Python进阶系列》十二:最全魔术方法整理

    Python中的魔术方法 所谓魔法函数 Magic Methods 是Python的一种高级语法 允许你在类中自定义函数 并绑定到类的特殊方法中 比如在类A中自定义 str 函数 则在调用str A 时 会自动调用 str 函数 并返回相应
  • Java继承(超详解)

    目录 1 继承 1 1 继承概述 1 2 继承的优缺点 1 3 继承中变量的访问特点 1 4 super 1 5 继承中构造方法的访问特点 1 6 继承中成员方法的访问特点 1 7 方法重写 1 8 方法重写的注意事项 1 9 java中继
  • 2021年南京大学842考研-软件工程部分简答题

    1 抽象和分解的关系 抽象和分解是软件设计的核心思想 分解是横向将系统分解为几个相对简单的子系统以及各子系统之间的关系 分解之后每次只需关注经过分解的相对简单的子系统及其相互间的关系 从而降低了复杂度 抽象则是在纵向上聚焦各自系统的接口 抽
  • MyBatis简介

    1 什么是 MyBatis MyBatis 是一款优秀的持久层框架 它支持自定义 SQL 存储过程以及高级映射 MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作 MyBatis 可以通过简单的 XML 或注解来
  • c++ std::string截取子串

    std vector
  • 上传文件请求绕过网关

    一 问题描述 1 本例中 我需要请求上传文件微服务的接口 并且绕过Zuul网关 因为请求会携带图片 如果再通过网关的话 会非常浪费资源 2 图片上传是文件的传输 如果也经过Zuul网关的代理 文件就会经过多次网路传输 造成不必要的网络负担
  • 【附源码】计算机毕业设计Python安卓Android的问卷调查管理系统9q4d4(源码+程序+LW+调试部署)

    附源码 计算机毕业设计Python安卓Android的问卷调查管理系统9q4d4 源码 程序 LW 调试部署 该项目含有源码 文档 程序 数据库 配套开发软件 软件安装教程 项目运行环境配置 Python3 7 7 Django Mysql
  • 【有限元分析】有限元仿真分析与解析解的结果对比——以阶梯轴的静力分析为例

    1 对一个阶梯轴零件进行基于材料力学的理论计算 求解最大应力值 2 在WORKBENCH中对该阶梯轴零件进行有限元仿真 实行两种仿真方案 分别是1 梁模型建模 梁单元网格划分 2 实体模型建模 六面体单元网格划分 观察两种仿真结果并与理论计
  • Flask导入配置文件

    为什么要导入配置文件呢 我刚开始学习Flask的时候 觉得没这必要 所以直接忽略了 后来 app的配置越来越多 并且不同的py文件里的配置有重复 所以需要另外写一个配置文件 方便管理 官方文档上说的有3种方法 app config from
  • android 拍照上传照片

    废话不多说 直接进入主题 想要在android中实现拍照最简单饿方法就是New 一个 Intent 设置Action为android media action IMAGE CAPTURE 然后使用startActivityForResult
  • 锁存器、触发器和寄存器

    锁存器 锁存器 latch 对脉冲电平敏感 在时钟脉冲的电平作用下改变状态 锁存器是电平触发的存储单元 数据存储的动作取决于输入时钟 或者使能 信号的电平值 当锁存器处于使能状态时 输出才会随着数据输入发生变化 简单地说 它有两个输入 分别
  • 使用jvisualvm进行远程监控

    使用jvisualvm进行远程监控
  • 判定表法设计测试用例

    判定表法设计测试用例 1 判定表 是分析和表达多逻辑条件下执行不同操作的工具 判定表是由条件桩 动作桩 条件项 动作项四部分组成的表格 1 条件桩 列出了所有条件 通常认为列出条件的次序无关紧要 2 动作桩 列出所有可能的操作 这些操作的排
  • SQL布尔盲注

    SQL布尔盲注 常用函数 注入步骤 1 爆数据库名称长度 2 爆库名 3 确定当前库中表的个数 4 爆表名长度 5 爆表名 6 爆表项个数 7 爆表项长度 8 爆表项 9 爆数据 常用函数 substr str from length 返回
  • Oracle 时间差计算

    Oracle 时间差计算 两个Date类型字段 START DATE END DATE 计算这两个日期的时间差 分别以天 小时 分钟 秒 毫秒 天 ROUND TO NUMBER END DATE START DATE 小时 ROUND T
  • 编译cpp_extension遇到的问题

    参考 https blog csdn net tanmx219 article details 100829920 https github com facebookresearch maskrcnn benchmark issues 25
  • jvm----运行时数据区域

    先导 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域 这些区域有各自的用途 以及创建和销毁的时间 有的区域随着虚拟机进程的启动而一直存在 有些区域则是依赖用户线程的启动和结束而建立和销毁 根据 Java
  • 论文笔记understanding black-box predictions via influence functions

    Purpose To formalize the impact of a training point on a prediction we ask the counterfactual what would happen if we di
  • 网络流和数据流

    1 流的本质为基本类型数组 2 网络流和数据流都是读某个文件路径 形成编码 再解析出来 short x arr i lt lt 8 arr i 1 char w char x char int short long都可以存视频流 音频流等