精华内容
下载资源
问答
  • java.io包提供了用来永久保存对象状态的机制,可处理各种类型的,如文件、字节、字符等,还提供实现可串行化Serializable接口、可处理对象。 Java语言提供3种自动生成的标准。 System.out是标准输出...

    java.io包提供了用来永久保存对象状态的机制,可处理各种类型的流,如文件流、字节流、字符流等,还提供实现可串行化Serializable接口、可处理对象流。  

    Java语言提供3种自动生成的标准流。

    System.out是标准输出流。

    System.in是标准输入流。

    System.err是标准异常流。

    数据格式:分为文本和二进制两种。对文本格式应用reader和writer类。二进制格式应用InputStream和OutputStream类。

    随机访问能力:这种数据存储格式都采用二进制形式。使用随机访问可提高运行效率。

    操作是否是对象:如数据本身是对象,使用ObjectInputStream和ObjectOutputStream类。

    数据的来源或去处:对数据可以用几种方法输入/输出:文件、字符串、字符数组和套字节。它们都可以将InputStream或Reader作为数据源,OutputStream或Writer作为数据去处。

    数据是否需要过滤:数据过滤通过缓冲和检查和两种方法实现。

    一个简单的读取txt文件实例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    InputStream is = null;
    BufferedReader br = null;
    try {
        is = am.open(“test.txt”);//可换成任意格式文件
        br = new BufferedReader(new InputStreamReader(is));
        String line = br.readLine();
        StringBuffer sb = new StringBuffer();
        while (line != null) {
            sb.append(line);
            sb.append("n");
            line = br.readLine();
         }
    catch (IOException e) {
             e.printStackTrace();
    }

    转载于:https://www.cnblogs.com/muhy/p/11525569.html

    展开全文
  • 本文章描述了怎样按需从自定义目录读取视频数据或记录到自定义目录,而不是应用中默认的目录。 [b][color=red]文件名生成器服务[/color][/b] Red5的功能使用了scope services概念,一些功能在一定scope中...
    [color=red][b]前言[/b][/color]
    本文章描述了怎样用流按需从自定义目录读取视频数据或记录到自定义目录,而不是应用中默认的流目录。

    [b][color=red]文件名生成器服务[/color][/b]
    Red5的功能使用了scope services概念,一些功能在一定scope中才提供。IStreamFilenameGenerator是scope service之一,它能够为视频点播(VOD)流生成文件名来播放或记录。

    [b][color=red]自定义生成器[/color][/b]
    要在不同的文件夹中生成文件名,必须实现一个新的文件名生成器。
    import org.red5.server.api.IScope;
    import org.red5.server.api.stream.IStreamFilenameGenerator;

    public class CustomFilenameGenerator implements IStreamFilenameGenerator {

    /** Path that will store recorded videos. */
    public String recordPath = "recordedStreams/";
    /** Path that contains VOD streams. */
    public String playbackPath = "videoStreams/";

    public String generateFilename(IScope scope, String name,
    GenerationType type) {
    // Generate filename without an extension.
    return generateFilename(scope, name, null, type);
    }

    public String generateFilename(IScope scope, String name,
    String extension, GenerationType type) {
    String filename;
    if (type == GenerationType.RECORD)
    filename = recordPath + name;
    else
    filename = playbackPath + name;

    if (extension != null)
    // Add extension
    filename += extension;

    return filename;
    }
    }

    上面的类会生成一个文件名来记录流数据如recordedStreams/red5RecordDemo1234.flv,同时将videoStreams目录做为视频点播流的源目录。

    [b][color=red]激活自定义生成器[/color][/b]
    在下一步中,自定义生成器必需在应用的配置文件中激活。
    把下面的定义加到yourApp/WEB-INF/red5-web.xml中:
    <bean id="streamFilenameGenerator" 
    class="path.to.your.CustomFilenameGenerator" />

    这样才会用刚才定义的类生成流文件名。

    [color=red][b]通过配置改变路径[/b][/color]
    现在类能够按预期工作了,但是有一点不方便当要改路径时要在代码中修改,之后必须要重新编译类。
    为此你可以在上一步中,配置文件里定义bean时传递参数来指定使用的路径。
    在类中添加了两个方法,当解析配置文件的时候会被执行:
    public void setRecordPath(String path) {
    recordPath = path;
    }

    public void setPlaybackPath(String path) {
    playbackPath = path;
    }

    现在你可以在bean定义中设置路径:
    <bean id="streamFilenameGenerator" 
    class="path.to.your.CustomFilenameGenerator">
    <property name="recordPath" value="recordedStreams/" />
    <property name="playbackPath" value="videoStreams/" />
    </bean>

    你也可以把路径写在yourApp/WEB-INF/red5-web.properties文件里通过参数访问他们:
    <bean id="streamFilenameGenerator" 
    class="path.to.your.CustomFilenameGenerator">
    <property name="recordPath" value="${recordPath}" />
    <property name="playbackPath" value="${playbackPath}" />
    </bean>

    这样你就得添加以下几行到你的属性文件:
    recordPath=recordedStreams/
    playbackPath=videoStreams/
    展开全文
  • 现在后台视频流数据无法传到前台啊, 后台java读取视频文件,转化为二进制存储, 怎样传到前台啊,求大神讲解。 不知道我描述清楚没?
  • 复制图片的原理是:使用字节输入流读取数据的同时,另一端使用输出把数据写入需要的磁盘里。 首先我们需要新建一个IOStream类,找到需要复制的图片路径(D:\\jpg.jpg) public class IOStream { public static ...

    怎样使用IO流复制图片?

    复制图片的原理是:使用字节输入流读取数据的同时,另一端使用输出流把数据写入需要的磁盘里。

     

    首先我们需要新建一个IOStream类,找到需要复制的图片路径(D:\\jpg.jpg)

    public class IOStream {
    public static void main(String[] args) {
    FileInputStream fis=null;
    FileOutputStream fos=null;
    try {

    //输入流读取 D:\\jpg.jpg
    fis=new FileInputStream("D:\\jpg.jpg");

    //输出流写入 E:jpg3.jpg
    fos=new FileOutputStream("E:\\jpg3.jpg");
    //创建一个字节缓冲区,存放读取的字节
    byte[] buffer=new byte[1024];
    int len=0;    //定义一个字节
    while ((len=fis.read(buffer))!=-1) {       //如果读取的字节为-1,说明已经读到了结尾
    fos.write(buffer,0,len);              //把读取到的数据存放入缓冲区
    fos.flush();               //把数据冲缓冲区写入目标位置
    }
    System.out.println("复制成功!");     //在控制台打印语句,可以直观的反应是否复制成功。
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }finally{
    try {
    fos.close();      //关闭输出流(后开的先关)
    fis.close();       //关闭输入流
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    }

     

    字节流可以传文本、图片、电影;字符流只能传文本。

     

    转载于:https://www.cnblogs.com/wxbblogs/p/6825343.html

    展开全文
  • HDFS中的读写数据流

    2017-03-17 13:08:00
    在客户端执行读取操作时,客户端和HDFS交互过程以及NameNode和各DataNode之间的数据流怎样的?下面将围绕图1进行具体讲解。  图 1 客户端从HDFS中读取数据 1)客户端通过调用FileSystem对象中的open()函数来...

    1.文件的读取

    在客户端执行读取操作时,客户端和HDFS交互过程以及NameNode和各DataNode之间的数据流是怎样的?下面将围绕图1进行具体讲解。

    bubuko.com,布布扣

              图 1 客户端从HDFS中读取数据 

    1)客户端通过调用FileSystem对象中的open()函数来读取它做需要的数据。FileSystem是HDFS中DistributedFileSystem的一个实例。

    2)DistributedFileSystem会通过RPC协议调用NameNode来确定请求文件块所在的位置。

    这里需要注意的是,NameNode只会返回所调用文件中开始的几个块而不是全部返回。对于每个返回的块,都包含块所在的DataNode地址。随后,这些返回的DataNode会按照Hadoop定义的集群拓扑结构得出客户端的距离,然后再进行排序。如果客户端本身就是一个DataNode,那么它就从本地读取文件。其次,DistributedFileSystem会向客户端返回一个支持文件定位的输入流对象FSDataInputStream,用于给客户端读取数据。FSDataInputStream包含一个DFSInputStream对象,这个对象用来管理DataNode和NameNode之间的IO。

    3)当以上步骤完成时,客户端便会在这个输入流上调用read()函数。

    4)DFSInputStream对象中包含文件开始部分数据块所在的DataNode地址,首先它会连接文件第一个块最近的DataNode。随后,在数据流中重复调用read()函数,直到这个块完全读完为止。

    5)当第一个块读取完毕时,DFSInputStream会关闭连接,并查找存储下一个数据库距离客户端最近的DataNode。以上这些步骤对于客户端来说都是透明的。

    6)客户端按照DFSInputStream打开和DataNode连接返回的数据流的顺序读取该块,它也会调用NameNode来检索下一组块所在的DataNode的位置信息。当完成所有文件的读取时,客户端则会在DFSInputStream中调用close()函数。

    那么如果客户端正在读取数据时节点出现故障HDFS会怎么办呢?目前HDFS是这样处理的:如果客户端和所连接的DataNode在读取时出现故障,那么它就会去尝试连接存储这个块的下一个最近的DataNode,同时它会记录这个节点的故障,以免后面再次连接该节点。客户端还会验证从DataNode传送过来的数据校验和。如果发现一个损坏块,那么客户端将再尝试从别的DataNode读取数据块,向NameNode报告这个信息,NameNode也会更新保存的文件信息。

    这里关注的一个设计要点是,客户端通过NameNode引导获取最合适的DataNode地址,然后直接连接DataNode读取数据。这样设计的好处在于,可以使HDFS扩展到更大规模的客户端并行处理,这是因为数据的流动是在所有DataNode之间分散进行的;同时NameNode的压力也变小了,使得NameNode只用提供请求块所在的位置信息就可以了,而不用通过它提供数据,这样就避免了NameNode随着客户端数量的增长而成为系统瓶颈。

    2.文件的写入

    那HDFS中文件的写入过程又是怎样的呢?以下将围绕图2来进行介绍。

    bubuko.com,布布扣

                                     图2 客户端在HDFS中写入数据

    1)客户端通过调用DistributedFileSystem对象中的create()函数创建一个文件。DistributedFileSystem通过RPC调用在NameNode的文件系统命名空间中创建一个新文件,此时还没有相关的DataNode与之相关。

    2)NameNode会通过多种验证保证新的文件不存在文件系统中,并且确保请求客户端拥有创建文件的权限。当所有验证通过时,NameNode会创建一个新文件的记录,如果创建失败,则抛出一个IOException异常;如果成功,则DistributedFileSystem返回一个FSDataOutputStream给客户端用来写入数据。这里FSDataOutputStream和读取数据时的FSDataOutputStream一样都包含一个数据流对象DFSOutputStream,客户端将使用它来处理和DataNode及NameNode之间的通信。

    3),4)当客户端写入数据时,DFSOutputStream会将文件分割成包,然后放入一个内部队列,我们称为“数据队列”。DataStreamer会将这些小的文件包放入数据流中,DataStreamer的作用是请求NameNode为新的文件包分配合适的DataNode存放副本。返回的DataNode列表形成一个“管道”,假设这里的副本数是3,那么这个管道中就会有3个DataNode。DataStreamer将文件包以流的方式传送给队列中的第一个DataNode。第一个DataNode会存储这个包,然后将它推送到第二个DataNode中,随后照这样进行,直到管道中的最后一个DataNode。

    5)DFSOutputStream同时也会保存一个包的内部队列,用来等待管道中的DataNode返回确认信息,这个队列被称为确认队列(ask queue)。只有当所有的管道中的DataNode都返回了写入成功的信息文件包,才会从确认队列中删除。

    当然HDFS会考虑写入失败的情况,当数据写入节点失败时,HDFS会作出以下反应.首先管道会被关闭,任何在确认通知队列中的文件包都会被添加到数据队列的前端,这样管道中失败的DataNode都不会丢失数据。当前存放于正常工作DataNode之上的文件块会被赋予一个新的身份,并且和NameNode进行关联,这样,如果失败的DataNode过段时间从故障中恢复过来,其中的部分数据块就会被删除。然后管道会把失败的DataNode删除,文件会继续被写到管道中的另外两个DataNode中。最后NameNode会注意到现在的文件块副本数没有到达配置属性要求,会在另外的DataNode上重新安排创建一个副本。随后的文件会正常执行写入操作。

    当然,在文件块写入期间,多个DataNode同时出现故障的可能性存在,但是很小。只要dfs.replication.min的属性值(默认为1)成功写入,这个文件块就会被异步复制到其他DataNode中,直到满足dfs.replictaion属性值(默认值为3)。

    6)客户端成功完成数据写入的操作后,就会调用close()函数关闭数据流。这步操作会在连接NameNode确认文件写入完全之前将所有剩下的文件包放入DataNode管道,等待通知确认信息。NameNode会知道哪些块组成一个文件(通过DataStreamer获得块的位置信息),这样NameNode只要在返回成功标志前等待块被最小量(dfs.replication.min)复制即可。

    转载于:https://www.cnblogs.com/itboys/p/6565496.html

    展开全文
  • 怎样使用简单的IO

    2017-05-27 09:33:43
    Input 是输入 读取数据的 Output 是输出 把写好的数据(把读取的数据)保存到那里  2.怎样获取硬盘里的文件内容:   3.直接使用字符和字节读写数据读取里面的内容,放入你文件的路径
  • 是IplImage* 或cv::Mat类型的,这样读取的图片是像素值,转化为char* 进行post上传后图片格式不符合File类型,所以怎样能把IplImage* 或cv::Mat类型的图片转化为与HTTP-body对应的File类型(或者二进制数据)进行...
  • 在客户端执行读取操作时,客户端和HDFS交互过程以及NameNode和各DataNode之间的数据流怎样的?下面将围绕图1进行具体讲解。  图 1 客户端从HDFS中读取数据 1)客户端通过调用FileSystem对象中的open()函数来...
  • 或许有人想过无数据库的网站开发,而关于无数据库的ASP源码留言板也出现在网络上,我也下载来... 在我的设计里,抛去任何类型的数据库,哪怕是文件流,在五蔺开源CMS里,一个无数据库的网站数据流操作原理应该是怎样
  • 程序怎样输入多组测试数据? **什么是EOF? 判题机在判题过程中会将题目的每一组测试单元的【Input文件】链接到stdin,将stdout重定向到用户的【Output文件】 因此,你的程序应该从标准输入stdin获取输出,并...
  • hadoop文件读取剖析

    2019-09-12 20:47:02
    为了了解客户端及与之交互的HDFS、名称节点和数据节点之间的数据流怎样的,我们可参考图3-1,其中显示了在读取文件时一些事件的主要顺序。 (点击查看大图)图3-1:客户端从HDFS中读取数据 ...
  • 此示例阐释如何使用 SqlDataReader 类从 SQL Server 读取数据。此类提供了一种从数据源读取只进数据记录的方法。如果要使用具有 OLE DB 接口或 SQL Server 7.0 以前的 SQL Server 版本的数据库,请参阅从 OLE DB ...
  • 实验环境:python2.7 第二篇我们来讲一讲小数据集的处理方法,小数据集一般多以文本存储为主,csv是一种流行的数据格式...为了工程需要我直接介绍读取该类型数据的最快方法,通过一些库,我们是可以用很少的步骤就读取
  • Spark Streaming 动态读取配置 为什么要动态读取配置? 在Spark 流式计算业务中, 比如通常复杂事件处理 (CEP) 的规则或者黑白名单一些配置...控制流方式,即作业除了用于计算的一个或多个普通数据流以外,还有提供一个用
  • 1. 引言: C语言把文件看作一个字符(字节)的序列,即由一个个字符(字节)的数据顺序组成。根据数据组织形式,可分为ASCII文件和二进制...怎样保存和读取文件中的数据流呢?学会这些I/O函数即可,如下: 2. 代码示例
  • Python用于处理文本数据绝对是个利器,极为简单的读取、分割、过滤、转换支持,使得开发者不需要考虑繁杂的文件处理过程(相对于JAVA来说的,嘻嘻)。博主自己工作中,一些复杂的文本数据处理计算,包括在HADOOP上...
  • 用字节流读取英文字符与数字 没有问题 能够正常显示 用字节流读取中文字符 可能会有问题 编解码 一个字符在计算机当中是怎样存储的? 基于某个编码表,有与之对应的整数值(编码值)存储在计算机当中的 编码 ...
  • 输入输出

    2017-08-12 09:08:46
    我们都知道在电脑上对数据的存储有三种方式,一种是...这里总结从外存读取数据到内存以及将数据从内存写到外存中。对于内存和外存的理解,我们可以简单的理解为容器,即外存是一个容器,内存又是另外一个容器。那又怎样
  • IO(二)五、流转换 键盘录入一行数据,...怎样使用readLine方法来完成键盘录入的一行数据读取? readLine方法是字符BufferedReader类中的方法,而键盘录入的read方法是字节InputStream的方法。这就要使
  • 在客户端中我的QSocket类对象调用write()发送数据流,服务器端readyread()信号关联的槽函数中用readAll()来读取缓冲区中的数据流,但是在读取数据的时候,我发现每一次读取数据后会有几毫秒的延时才会继续读取后来的...
  • 然后再使用SparkStreaming从Kafka中读取数据做实时的计算。但由于Kafka不会一直保存历史数据,因此如果用户的商业逻辑是结合历史数据和实时数据同时做分析,那么这条流水线实际上是没有办法完成的。因
  • Python用于处理文本数据绝对是个利器,极为简单的读取、分割、过滤、转换支持,使得开发者不需要考虑繁杂的文件处理过程(相对于JAVA来说的,嘻嘻)。博主自己工作中,一些复杂的文本数据处理计算,包括在HADOOP上...
  • 在类中学到了对数据的存储,怎样对一个文件进行读取就需要用到I/O的知识。文件的读写步骤有4步:首先打开文件的输入或输出;其次是判断文件或应用程序是否存在数据需要输入或输出中;第三步是进行文件数据的...
  • java字节文件输入读文件

    千次阅读 2017-04-15 21:22:49
    1、怎样把一个与一个文件联系起来。 2、用什么方法把从文件中读取数据显示到对话框中。 import java.io.*; import javax.swing.JOptionPane; class Example8_1{ public static void main(String args[]){
  • 这个问题实际上就是要探索ffmpeg中的读取数据和缓冲数据系统是如何运作的。 了解了这些可以帮助 我们在转码过程中方便的处理数据。 各函数探索 从内存获取数据的设置方法 从内存获取数据时,调用如下 AVIOContext * ...
  • 加工中心锁住怎样解开提供了一种对象序列化的机制。用一个字节序列可以表示一个对象,该字节序列包含该对象的数据、对象的类型和对象中存储的属性等信息。字节序列写出到文件之后,相当于文件中持久保存了一个对象的...
  • JAVA输入输出的总结

    2017-06-23 16:19:04
    我们都知道在电脑上对数据的存储有三种方式,一种是...这里总结从外存读取数据到内存以及将数据从内存写到外存中。对于内存和外存的理解,我们可以简单的理解为容器,即外存是一个容器,内存又是另外一个容器。那又怎样

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 180
精华内容 72
关键字:

怎样读取数据流