精华内容
下载资源
问答
  • HTML5 Ajax 2.0标准中,增强了Ajax...但实际上,Ajax可以字节发送二进制数据。发送二进制数据var oReq = new XMLHttpRequest();oReq.open("POST", url, true);oReq.onload = function (oEvent) {// Uploaded.};var b...

    HTML5 Ajax 2.0标准中,增强了Ajax的许多功能,包括发送FormData数据,上传数据进度条等诸多功能。但实际上,Ajax可以字节发送二进制数据。

    发送二进制数据

    var oReq = new XMLHttpRequest();

    oReq.open("POST", url, true);

    oReq.onload = function (oEvent) {

    // Uploaded.

    };

    var blob = new Blob(['abc123'], {type: 'text/plain'});

    oReq.send(blob);

    或者

    var myArray = new ArrayBuffer(512);

    var longInt8View = new Uint8Array(myArray);

    for (var i=0; i< longInt8View.length; i++) {

    longInt8View[i] = i % 255;

    }

    var xhr = new XMLHttpRequest;

    xhr.open("POST", url, false);

    xhr.send(myArray);

    接收二进制数据

    var oReq = new XMLHttpRequest();

    oReq.open("GET", "/myfile.png", true);

    oReq.responseType = "arraybuffer";

    oReq.onload = function (oEvent) {

    var arrayBuffer = oReq.response; // Note: not oReq.responseText

    if (arrayBuffer) {

    var byteArray = new Uint8Array(arrayBuffer);

    for (var i = 0; i < byteArray.byteLength; i++) {

    }

    }

    };

    oReq.send(null);

    当然,如上设置只能是文本类型,如果是Blob类型,那么如下即可

    var oReq = new XMLHttpRequest();

    oReq.open("GET", "/myfile.png", true);

    oReq.responseType = "arraybuffer";

    oReq.onload = function(oEvent) {

    var blob = new Blob([oReq.response], {type: "image/png"});

    // ...

    };

    oReq.send();

    或者

    var oReq = new XMLHttpRequest();

    oReq.open("GET", "/myfile.png", true);

    oReq.responseType = "blob";

    oReq.onload = function(oEvent) {

    var blob = oReq.response;

    // ...

    };

    oReq.send();

    如果你使用的是旧版本的浏览器,那么加载二进制可以如下

    function load_binary_resource(url) {

    var req = new XMLHttpRequest();

    req.open('GET', url, false);

    //XHR binary charset opt by Marcus Granado 2006 [http://mgran.blogspot.com]

    req.overrideMimeType('text\/plain; charset=x-user-defined');

    req.send(null);

    if (req.status != 200) return '';

    return req.responseText;

    }

    注意:x-user-defined告诉浏览器不要解析数据

    以上所述是小编给大家介绍的Win7任务栏Ajax发送和接收二进制字节流数据的方法的相关知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

    展开全文
  • 它应同时适用于文本文件和二进制文件(例如imgs).我对文本文件没有任何问题,它可以完美工作,但是对二进制文件有一些麻烦.首先,我声明一个BufferedReader(用于读取标题和文本文件)和一个DataInput流:BufferedReader ...

    我正在尝试连接到服务器,然后向其发送HTTP请求(在这种情况下为GET).这个想法是请求一个文件,然后从服务器接收它.

    它应同时适用于文本文件和二进制文件(例如imgs).我对文本文件没有任何问题,它可以完美工作,但是对二进制文件有一些麻烦.

    首先,我声明一个BufferedReader(用于读取标题和文本文件)和一个DataInput流:

    BufferedReader in_text = new BufferedReader(

    new InputStreamReader(socket.getInputStream()));

    DataInputStream in_binary = new DataInputStream(

    new BufferedInputStream(socket.getInputStream()));

    然后,我用in_text读取标题,并发现它是文本文件还是二进制文件.如果是文本文件,我可以在StringBuilder中正确读取.如果是二进制文件,我声明一个byte [filesize]并存储in_binary的以下内容.

    byte[] bindata = new byte[filesize];

    in_binary.readFully(bindata);

    而且它不起作用.我收到一个EOFException.

    我以为in_binary可能仍在流的第一个位置,因此它尚未读取标头.因此,我捕获了标头的长度,并跳过了in_binary中的字节.

    byte[] bindata = new byte[filesize];

    in_binary.reset();

    in_binary.skip(headersize);

    in_binary.readFully(bindata);

    而且还是一样.

    可能会发生什么?

    谢谢!

    PD:我知道我可以使用URLConnection等.那不是问题.

    展开全文
  • 下面简单介绍字节流的几个常用子类::: 字节流类 功能简单介绍 DataInputStream 包含了读取Java标准数据类型的输入流 DataOutputStream 包含了写Java标准数据类型的输出流 ByteArrayInputStream 从字节数组读取的...

    类的序列化需要支持Serializable接口,如果类支持序列化,可以通过ObjectOutPutStream和ObjectInputStream将对象和Stream之间进行方便的转换。

    首先来 看一下ObjectOutPutStream和ObjectInputStream的构造函数和常用方法:

    public ObjectOutputStream(OutputStream out) throws IOException :参数是输出流

    public ObjectInputStream(InputStream in) throws IOException:参数是输入流

    ObjectOutputStream.writeObject(Object):将对象序列化并写入到OutputStream中。

    ObjectInputStream.readObject():将InputStream读出对象,这里可能需要强制转换。

    **OutPutStream:首先代表这是个输出流,前面的**代表该输出流中存放的数据类型,可以是ByteArray,也可以是file,也可以是Data(代表java中的类对象)。

    **InPutStream:首先是一个输入流,前面的**代表输入流从那种类型读取数据,可以是ByteArray,代表将数据读出到字节数组中。可以是Data,表示将数据读成Java中的类对象。

    字节流包含两个顶层抽象类:InputStream和OutputStream。

    1:字节流的两个顶层类是抽象类,分别是:InputStream和OutputStream。

    2:每个抽象类都有子类来实现具体的功能,处理不同的设备的输入和输  出。

    下面简单介绍字节流的几个常用子类:::

    字节流类

    功能简单介绍

    DataInputStream

    包含了读取Java标准数据类型的输入流

    DataOutputStream

    包含了写Java标准数据类型的输出流

    ByteArrayInputStream

    从字节数组读取的输入流

    ByteArrayOutputStream

    写入字节数组的输出流

    FileInputStream

    从文件读入的输入流

    FileOutputStream

    写入文件的输出流

    PrintStream

    包含最常见的Print()和Println()的输出流

    PushbackInputStream

    返回一个字节到输入流,主要用于编译器的实现

    PipedInputStream

    输出管道

    PipedOutputStream

    输入管道

    SequenceInputStream

    将n个输入流联合起来,一个接一个按一定顺序读取

    RandomAccessFile

    随机访问文件

    BufferInputStream

    缓冲输入流

    BufferOutputStream

    缓冲输出流

    FilterInputStream

    实现了InputStream Interface

    FilterOutputStream

    实现了OutputStream Interface

    InputStream

    抽象类,描述流的输入

    OutputStream

    抽象类,描述流的输入

    抽象类InputStream和OutpurStream定义了实用的方法,其中最主要的是read()和

    write()。这两个方法在InputStream和OutputStream中声明为抽象方法,由子流类overwrite实现。

    2:每个抽象类都有子类来实现具体的功能,处理不同的设备的输入和输  出。

    下面简单介绍字节流的几个常用子类:::

    字节流类

    功能简单介绍

    DataInputStream

    包含了读取Java标准数据类型的输入流

    DataOutputStream

    包含了写Java标准数据类型的输出流

    ByteArrayInputStream

    从字节数组读取的输入流

    ByteArrayOutputStream

    写入字节数组的输出流

    FileInputStream

    从文件读入的输入流

    FileOutputStream

    写入文件的输出流

    PrintStream

    包含最常见的Print()和Println()的输出流

    PushbackInputStream

    返回一个字节到输入流,主要用于编译器的实现

    PipedInputStream

    输出管道

    PipedOutputStream

    输入管道

    SequenceInputStream

    将n个输入流联合起来,一个接一个按一定顺序读取

    RandomAccessFile

    随机访问文件

    BufferInputStream

    缓冲输入流

    BufferOutputStream

    缓冲输出流

    FilterInputStream

    实现了InputStream Interface

    FilterOutputStream

    实现了OutputStream Interface

    InputStream

    抽象类,描述流的输入

    OutputStream

    抽象类,描述流的输入

    抽象类InputStream和OutpurStream定义了实用的方法,其中最主要的是read()和

    write()。这两个方法在InputStream和OutputStream中声明为抽象方法,由子流类overwrite实现。

    在网络传输的过程中,是通过socket.getInputStream()和getOutPutStream()来进行。

    展开全文
  • 概述通过前三篇博客,我们能够了解在通过WebSocket发送数据之前,我们需要传递的数据是如何变成ArrayBuffer二进制数据的;在我们收到二进制数据之后,我们又如何将其变成了JavaScript中的常见数据类型。本文作为...

    概述

    通过前三篇博客,我们能够了解在通过WebSocket发送数据之前,我们需要传递的数据是如何变成ArrayBuffer二进制数据的;在我们收到二进制数据之后,我们又如何将其变成了JavaScript中的常见数据类型。

    本文作为WebSocket系列的第四篇内容,将会用一个简单的IM聊天应用把整个WebSocket传输二进制数据类型的内容连接起来,让用户对整个WebSocket传输二进制数据的方法有个了解。

    本文的主要内容如下:

    如何设计一个二进制协议

    WebSocket如何发送二进制数据

    WebSocket如何处理接收的二进制数据

    之前的博客我们介绍过了WebSocket基础知识,数字类型和字符串类型与二进制数据间的转换,如果没有相关的基础,建议先依次阅读以下文章:

    如何设计一个二进制协议

    什么是协议

    协议,网络协议的简称,网络协议是通信计算机双方必须共同遵从的一组约定。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。它的三要素是:语法、语义、时序。

    通过百度百科中的介绍,我们对协议的概念有了一个基础的了解。通俗来说,协议就是通信双方约定好的一套规则。

    为什么要设计协议

    没有规矩不成方圆。通信双方只有通过协议,才能够识别对方发送的数据内容。

    我们应该如何设计这套协议

    首先,协议的设计应该能够区分不同的各个数据包;其次,它还需要具备一定的兼容性。

    根据上述两点要求,我们设计了一套简单的IM聊天协议,支持文本、图片、文件三种消息。这套协议是按照最简单的思路来设计的,因此也只是给大家一个参考的观点,在真正的线上使用场景中,协议会比本文中的复杂和更加有层次。具体格式如下:

    {

    "id": "short", // 消息类型,1是文本协议格式;2是图片协议格式;3是文件协议格式

    "sender": "long", // 发送用户唯一id

    "reciever": "long", // 接受用户唯一id

    "data": "string" // 消息内容,如果是文本协议则为文本内容;如果是图片协议则为图片地址;如果是文件协议则为文件地址

    }

    这套协议如何使用

    发送消息

    从协议格式可知,将上述数据按照上述固定顺序放入ArrayBuffer中,即可得到一个有特定含义的二进制数据。例如:

    {

    "id": 1,

    "sender": "123",

    "reciever": "456",

    "data": "Hellow World"

    }

    当我们需要发送此消息时,只需要:

    在前2个Byte放入id。

    接下来8个Byte中放入sender。

    再接下来8个Byte放入reciever。

    最后紧接着放入一个string类型(以WebSocket系列之字符串如何与二进制数据进行转换博客中的格式为例,先将字符串长度构造成一个int类型,放在前4个Byte中,接下来将string类型编码后放入)。

    此数据就完全按照协议构造完成了。我们只需将次协议通过WebSocket发送即可。具体方法将会在后面章节中说明。

    接收消息

    从协议格式可知,当我们收到一条消息时,只需要按照协议规范来进行反向解析即可。例如:

    {

    "id": 1,

    "sender": "123",

    "reciever": "456",

    "data": "Hellow World"

    }

    如果发送端发送的数据仍然为此消息,我们的解析顺序为:

    先根据前2个Byte读取一个Short类型的id数值。

    将接下来的8个Byte读取为Long类型的sender字段。

    再接下来的8个Byte读取为Long类型的reciever字段。

    接下来读取一个string类型(以发送消息这一节的数据为例,先读取4个Byte长度的int类型字符串长度,然后再根据长度读取字符串即可)。

    扩展此协议

    当此协议字段无法满足并且已经在线上使用时,我们应该如何扩展呢?

    根据我们的写入和读取步骤,我们可以知道:每次我们读取的二进制数据可以认为是一个格式固定的数据(string类型在构造时会有长度信息,因此认为也是长度相对固定),所以我们在读取二进制数据时读取的长度也是固定的。因此,我们在扩展时只需要往协议后面增加字段即可。

    扩展前的应用仍然会读取之前已经确定的数据协议,只需要保证内容不变,那么功能也不会变。

    扩展后的应用能够解析扩展后的协议,因此得到更多的数据,从而可以实现更多的功能。

    WebSocket如何发送二进制数据

    通过如何设计一个二进制协议一章,我们知道了如何定义WebSocket传输的二进制数据格式。下面,我们来看下如何在WebSocket中发送二进制数据:

    let arrayBuffer = getArrayBufferMessagesFromUser(); // 获取用户需要发送的消息数据,为一个ArrayBuffer对象

    let webSocket = getWebSocket(); // 获取已经连接成功的WebSocket实例

    websocket.binaryType = 'arraybuffer'; // 指定WebSocket接受ArrayBuffer实例作为参数

    webSocket.send(arrayBuffer);

    通过上面的示例我们可以知道,WebSocket在发送string类型的数据或者ArrayBuffer类型的数据时,使用的API接口都是send方法,我们只需要在WebSocket初始化后指定传输类型binaryType即可。

    WebSocket如何处理接收的二进制数据

    通过WebSocket如何发送二进制数据一章,我们知道了如何发送二进制数据。接下来,让我们开看下如何处理WebSocket接收到的二进制数据:

    let webSocket = getWebSocket(); // 获取已经连接成功的WebSocket实例

    websocket.binaryType = 'arraybuffer'; // 指定WebSocket接受ArrayBuffer实例作为参数

    webSocket.addEventListener('message', (message) => {

    let arrayBuffer = message.data; // 获取用户接收到的消息数据,为一个ArrayBuffer对象

    let data = parseMessage(arrayBuffer); // 解析二进制数据

    });

    通过上面的示例我们可以知道,当我们在建立连接时指定了传输类型binaryType为ArrayBuffer之后,我们通过WebSocket收到的数据也是一个ArrayBuffer实例。我们只需要根据第一章讲解的方式进行解析即可。

    总结

    本文作为WebSocket系列的第四篇,通过一个IM聊天应用的示例将前三篇博客分享的内容串联起来,给读者完整介绍了在WebSocket中使用二进制数据进行传输的方法以及相关的数据类型转换。

    通过前面4篇博客的内容,读者可以根据自己的需求快速的构造和封装WebSocket进行二进制数据传输,基本能够串联整个应用流程。

    WebSocket系列下一篇文章将会介绍在线上环境中,如何保证WebSocket的连接,以及线上可能遇到的问题。通过应对WebSocket可能出现的问题,我们能够让整个长连接更加健壮。

    展开全文
  • 数据传输时,通常会为了减少网络开销而去除实际不用的位,减少用0填充二进制数据。从而提高性能。但是随之而来的解析上,遇到了一个小问题。就是在java内,如何快速的寻找自己想要的位。数据模型: 上图中,此次...
  • 我不认为你需要一个框架,因为自定义解析器很简单.InputStream in = new ByteArrayInputStream(new byte[]{0x00, 0x0a, (byte) 0xff,0x01, 0x01, 0x01, (byte) 0xff,0x01, (byte) 0xff});ByteArrayOutputStream baos ...
  • Java后台接收二进制流和Base64数据保存图片 Java后台用的是Springmvc框架,接收前台传过来的二进制流数据或者是base64的字符串图片数据接收二进制数据: @RequestMapping("/uploadImg") @ResponseBody public ...
  • 原文链接:https://blog.csdn.net/gouyadongGYD/article/details/99644173————————————————java后台用的是Springmvc框架,接收前台传过来的二进制数据或者是base64的字符串图...
  • Java后台接收二进制流和Base64数据

    千次阅读 2020-02-22 20:37:45
    java后台用的是Springmvc框架,接收前台传过来...接收二进制数据: @RequestMapping("/uploadImg") @ResponseBody public Object uploadImg(HttpServletRequest request, HttpServletResponse response) throws I...
  • XML中二进制数据的处理方法在xml中,所有的数据都是以文本的形式来显示,但是二进制数据不能直接以文本格式来表示,那xml又是怎么处理二进制数据的呢?...目的方接收到这个文本二进制数据以后,再以相同的解...
  • * 图片类* @author Haroldphp@163.com* @version 1.0*...因此,对型如text/xml 或者 soap 或者 application/octet-stream 之类的内容无法解析,如果用$_POST数组来接收就会失败!故保留原型,交给$GLOBALS['HTTP_R...
  • 数据传输时,通常会为了减少网络开销而去除实际不用的位,减少用0填充二进制数据。从而提高性能。但是随之而来的解析上,遇到了一个小问题。就是在java内,如何快速的寻找自己想要的位。数据模型:上图中,此次...
  • 在以不同语言编写并在不同平台上运行的应用程序之间交换数据时,Protobuf 编码可提高效率。-- Marty Kalin协议...例如,用 Go 编写的发送程序可以在 Protobuf 中对以 Go 表示的销售订单数据进行编码,然后用 Java...
  • 我正在尝试从URLConnection读取二进制文件。当我用文本文件测试它似乎工作正常,但对于二进制文件,它没有。当文件发送时,我在服务器上使用以下mime类型:application/octet-stream但到目前为止,似乎没有任何工作...
  • 提前致谢..首先,我要这个用于android....现在,根据我发送的名称列表,服务器将向我发送一个zip文件的二进制数据,我必须将该二进制数据(响应)另存为一个zip文件....我需要将接收到的二进制数据转换为某些字符...
  • JS操作websocket接收的图片,今天刚写的,也是用filereader实现。 [html] view plain copy ws.onmessage = function(evt) { if(typeof(evt.data)=="string"){ //textHandler(JSON.parse(evt.data)); }else{ ...
  • 数据传输时,通常会为了减少网络开销而去除实际不用的位,减少用0填充二进制数据。从而提高性能。但是随之而来的解析上,遇到了一个小问题。就是在java内,如何快速的寻找自己想要的位。数据模型: 上图中,此次...
  • 工作的时候遇到了处理二进制数据的问题,我是用Map<String,Object>进行接收, 获取value值后,转成CLOB类型的。通过getSubString方法,读取它的所有数据,这样就直接转换成了String类型的数据。 下面还尝试...
  • 想发送二进制数据,然后把二进制数据落入日志,通过java程序将二进制数据还原。 但是发送的二进制数据和原始的不一样,求大神帮忙看下。 # 问题 ## nginx配置 ![图片说明]...
  • 因为我们的机器返回的是二进制数据,在android端需要对这个二进制进行接收,但是这个二进制在接收的过程中被转换成了int数组接收显示的,所以需要我们另外写一个方法来进行还原 六种音源分别是 光纤,高电平,蓝牙...
  • 最近在一个项目中遇到一个场景:需要服务器端发送字节数组byte[]给客户端,后台采用Java提供接口,前段采用HTML + JavaScript访问接口。 解决方案 服务器端 服务器端比较简单,直接提供一个接口即可,接口返回 byte...
  • TCP二进制接收

    千次阅读 2015-01-07 17:33:06
    由于需求的改变现在需要接收二进制流式数据,下面记录一下客户端接收数据的实现的源码。package client; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import java...
  • Java---Socket二进制通讯读取一行》

    千次阅读 2016-08-18 16:25:40
    Socket二进制通讯,结束标志...提供二进制数据读取一行方法。 public static byte[] readLine(InputStream in) throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); int c = in.read
  • 先说一下需求:用webservice实现文件传输,并且客户端只能接收字符串。...这种方法在二进制转字任串的时候必须用iso8859-1编码,同理字符串到二进制也要用iso8859-1,否则会丢失数据,最后生成文件时错
  • 服务器的图片存的不是路径,而是在数据库中的blob流对象,由于要求所有数据都用json传值,图片服务器端的处理方式是把图片二进制流转化成字符串。服务器和Android都是java开发的,很方便,直接都用jackson封装和解析...
  • UDP 和 TCP 的不同TCP 在传送数据之前必须先建立连接,数据传送结束后要释放连接。...接收方收到 UDP 报文之后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 却是一种最有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 669
精华内容 267
关键字:

java接收二进制数据

java 订阅