http stream
- StringBuilder sb = new StringBuilder();
- sb.append("HTTP/1.1 200 OK\r\n");
- sb.append("Content-Type: text/plain\r\n");
- sb.append("Transfer-Encoding: chunked\r\n\r\n");
- sb.append("25\r\n");
- sb.append("This is the data in the first chunk\r\n"); // 37 bytes
- sb.append("\r\n1A\r\n");
- sb.append("and this is the second one"); // 26 bytes
- sb.append("\r\n0\r\n\r\n");
十六进制包长+\r\n+报文包+\r\n 为一个传输单元
0+\r\n+\r\n 当遇到这种空传输单元时结束
下面是客户端例子
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.InetSocketAddress;
- import java.net.Socket;
- import java.nio.ByteBuffer;
- import java.nio.channels.SocketChannel;
- import java.util.concurrent.Callable;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- import java.util.concurrent.FutureTask;
- public class Client {
- public boolean isAsync=false;
- /**
- * 建立socket
- * @param ip
- * @param port
- * @return
- * @throws IOException
- * @throws NumberFormatException
- * @throws PachiraAsrSocketCreateException
- */
- protected SocketChannel createSocketChannel(String ip,String port) throws NumberFormatException, IOException {
- SocketChannel socketChannel=null;
- if(isAsync){
- socketChannel = SocketChannel.open();
- socketChannel.configureBlocking(false);
- //向服务端发起连接
- if (!socketChannel.connect(new InetSocketAddress(ip, Integer.parseInt(port)))){
- //不断地轮询连接状态,直到完成连接
- while (!socketChannel.finishConnect()){
- //在等待连接的时间里,可以执行其他任务,以充分发挥非阻塞IO的异步特性
- //这里为了演示该方法的使用,只是一直打印"."
- try {
- Thread.sleep(10);
- } catch (InterruptedException e) {
- }
- // SrvLogger.debug(getClass(), "");
- }
- }
- }else{
- socketChannel = SocketChannel.open();
- socketChannel.connect(new InetSocketAddress(ip, Integer.parseInt(port)));
- }
- return socketChannel;
- }
- /**
- * 关闭socket
- * @param socketChannel
- * @param uuid
- * @throws IOException
- */
- protected void closeSocketChannel(SocketChannel socketChannel) throws IOException{
- if(socketChannel!=null){
- socketChannel.close();
- }
- }
- /**
- * 传输数据
- * @param socket
- * @param in
- * @param uuid
- * @param audioType
- * @throws IOException
- */
- protected boolean sendStringData(final SocketChannel socketChannel ,final String str) throws IOException{
- ByteBuffer buffer=ByteBuffer.wrap(str.getBytes(), 0, str.length());
- int size=0;
- int wl=0;
- System.out.println("buf.limit="+buffer.limit());
- wl=socketChannel.write(buffer);
- while (buffer.hasRemaining()) {
- if (wl < 0){
- System.out.println("sendData len is -1;size="+size);
- break;
- }
- if (wl == 0) {
- System.out.println("sendData len is 0 ;size="+size);
- }
- size+=wl;
- }
- buffer.flip();
- return true;
- }
- /**
- * 传输数据
- * @param socket
- * @param in
- * @param uuid
- * @param audioType
- */
- protected boolean sendData(final SocketChannel socketChannel ,final InputStream is){
- FutureTask<Integer> task = new FutureTask<Integer>(new Callable<Integer>(){
- public Integer call() {
- System.out.println("sendData start...;");
- byte[] buf = new byte[8096];
- int totalSize=0;
- int sendTotalSize=0;
- try {
- int read = is.read(buf, 0, buf.length);
- while (read > 0) {
- totalSize+=read;
- ByteBuffer buffer=ByteBuffer.wrap(buf, 0, read);
- int size=0;
- int wl=0;
- wl=socketChannel.write(buffer);
- while (buffer.hasRemaining()) {
- if (wl < 0){
- System.out.println("sendData len is -1;size="+size);
- break;
- }
- if (wl == 0) {
- System.out.println("sendData len is 0 ;size="+size);
- }
- size+=wl;
- }
- buffer.flip();
- sendTotalSize+=read;
- read = is.read(buf, 0, buf.length);
- }
- sendStringData(socketChannel, "------------V2ymHFg03ehbqgZCaKO6jy--");
- System.out.println("sendData end,sendTotalSize="+sendTotalSize+";totalSize="+totalSize);
- }catch (Exception e) {
- e.printStackTrace();
- }finally{
- }
- return new Integer(8);
- }
- });
- ExecutorService sendDataPool=Executors.newCachedThreadPool();
- sendDataPool.execute(task);
- return true;
- }
- /**
- * 传输数据
- * 十六进制包长+\r\n+报文包+\r\n 为一个传输单元
- 0+\r\n+\r\n 当遇到这种空传输单元时结束
- * @param socket
- * @param in
- * @param uuid
- * @param audioType
- */
- protected boolean sendDataChunk(final SocketChannel socketChannel ,final InputStream is){
- FutureTask<Integer> task = new FutureTask<Integer>(new Callable<Integer>(){
- public Integer call() throws IOException {
- System.out.println("sendData start...;");
- sendStringData(socketChannel, "\r\n");
- String parameter="------------V2ymHFg03ehbqgZCaKO6jy\r\nContent-Disposition: form-data;name=\"chon.wav\";opcode=\"transcribe_audio\";sessionid=\"\";filename=\"chon.wav\";type=\"23\";\r\n\r\n";
- sendStringData(socketChannel, Integer.toHexString(parameter.length())+"\r\n");
- sendStringData(socketChannel, parameter+"\r\n");
- // sendStringData(socketChannel, Integer.toHexString("1234".length())+"\r\n1234\r\n");
- // sendStringData(socketChannel, Integer.toHexString("1234".length())+"\r\n1234\r\n");
- // sendStringData(socketChannel, Integer.toHexString("1234".length())+"\r\n1234\r\n");
- // sendStringData(socketChannel, Integer.toHexString("1234".length())+"\r\n1234\r\n");
- // sendStringData(socketChannel, Integer.toHexString("------------V2ymHFg03ehbqgZCaKO6jy".length())+"\r\n");
- // sendStringData(socketChannel, "------------V2ymHFg03ehbqgZCaKO6jy\r\n");
- // String parameter="Content-Disposition: form-data;name=\"chon.wav\";opcode=\"transcribe_audio\";sessionid=\"\";filename=\"chon.wav\";type=\"23\";";
- // sendStringData(socketChannel, Integer.toHexString(parameter.length())+"\r\n");
- // sendStringData(socketChannel, parameter+"\r\n");
- byte[] buf = new byte[8096];
- int totalSize=0;
- int sendTotalSize=0;
- try {
- int read = is.read(buf, 0, buf.length);
- while (read > 0) {
- totalSize+=read;
- ByteBuffer buffer=ByteBuffer.wrap(buf, 0, read);
- String hex= Integer.toHexString(read);
- System.out.println("read="+read+";hex="+hex);
- sendStringData(socketChannel,hex+"\r\n");
- int size=0;
- int wl=0;
- // System.out.println("send..");
- wl=socketChannel.write(buffer);
- // System.out.println("send...");
- while (buffer.hasRemaining()) {
- if (wl < 0){
- System.out.println("sendData len is -1;size="+size);
- break;
- }
- if (wl == 0) {
- System.out.println("sendData len is 0 ;size="+size);
- }
- size+=wl;
- }
- sendStringData(socketChannel, "\r\n");
- buffer.flip();
- sendTotalSize+=read;
- read = is.read(buf, 0, buf.length);
- Thread.sleep(50);
- }
- sendStringData(socketChannel, Integer.toHexString("------------V2ynHFg03ehbqgZCaKO6jy--".length())+"\r\n");
- sendStringData(socketChannel, "------------V2ymHFg03ehbqgZCaKO6jy--");
- sendStringData(socketChannel, "\r\n");
- sendStringData(socketChannel, "0\r\n\r\n");
- System.out.println("sendData end,sendTotalSize="+sendTotalSize+";totalSize="+totalSize);
- }catch (Exception e) {
- e.printStackTrace();
- }finally{
- }
- return new Integer(8);
- }
- });
- ExecutorService sendDataPool=Executors.newCachedThreadPool();
- sendDataPool.execute(task);
- return true;
- }
- /**
- * 读取
- * @param inputStream
- * @param buf
- * @return
- * @throws IOException
- */
- protected boolean readData(SocketChannel socketChannel, ByteBuffer buf) {
- boolean ret = true;
- long count=0;
- try {
- count = socketChannel.read(buf);
- // if(this.isAsync){
- while(count<buf.limit()){
- if(count==-1){
- System.out.println("readData count is -1");
- return false;
- }
- count += socketChannel.read(buf);
- try {
- Thread.sleep(10);
- } catch (InterruptedException e) {
- return false;
- }
- }
- // System.out.println("buffer.position()="+buf.position()+";buffer.limit()="+buf.limit());
- // System.out.println("count="+count);
- // }
- if(count>0){
- buf.flip();
- }
- } catch (Exception e) {
- ret=false;
- }finally{
- System.out.println("readData count="+count+";bufLen="+buf.limit());
- }
- return ret;
- }
- /**
- * 读取
- * @param inputStream
- * @param buf
- * @return
- * @throws IOException
- */
- protected boolean readDataBySocket(SocketChannel socketChannel) throws IOException {
- Socket socket=socketChannel.socket();
- InputStream in=socket.getInputStream();
- byte[] buf1=new byte[7];
- while(this.read(in, buf1)){
- System.out.println("result"+new String(buf1));
- }
- return false;
- }
- protected boolean read(InputStream inputStream, byte[] buf)
- throws IOException {
- boolean ret = true;
- int totalSize = buf.length;
- int read = inputStream.read(buf, 0, buf.length);
- while (read < totalSize) {
- read += inputStream.read(buf, read, (totalSize - read));
- }
- return ret;
- }
- public void nonstream() throws IOException{
- String ip="127.0.0.1";
- String port="8080";
- File file=new File("I:/1/pase/90s_9.wav");
- FileInputStream fis=new FileInputStream(file);
- SocketChannel socketChannel=createSocketChannel(ip, port);
- String parameter="------------V2ynHFg03ehbqgZCaKO6jy\r\nContent-Disposition: form-data;name=\"chon.wav\";opcode=\"transcribe_audio\";sessionid=\"\";filename=\"chon.wav\";type=\"0\";";
- sendStringData(socketChannel, "POST /project/uploader HTTP/1.1\r\n");
- sendStringData(socketChannel, "Accept: */*\r\n");
- sendStringData(socketChannel, "User-Agent: Mozilla/4.0\r\n");
- sendStringData(socketChannel, "Content-Length: "+(file.length()+parameter.length())+"\r\n");
- sendStringData(socketChannel, "Accept-Language: en-us\r\n");
- sendStringData(socketChannel, "Accept-Encoding: gzip, deflate\r\n");
- sendStringData(socketChannel, "Host: 127.0.0.1\r\n");
- sendStringData(socketChannel, "Content-Type: multipart/form-data;boundary=----------V2ymHFg03ehbqgZCaKO6jy\r\n");
- sendStringData(socketChannel, "\r\n");
- sendStringData(socketChannel, parameter+"\r\n");
- sendStringData(socketChannel, "\r\n");
- //send file1449930
- sendData(socketChannel, fis);
- // client.sendStringData(socketChannel, "------------V2ymHFg03ehbqgZCaKO6jy--");
- ByteBuffer bb=ByteBuffer.allocate(2000);
- readData(socketChannel, bb);
- byte[] b=new byte[bb.limit()];
- bb.get(b, 0, bb.limit()-1);
- System.out.println(new String(b));
- }
- public static void main(String[] args) throws NumberFormatException, IOException {
- String ip="localhost";
- String port="8080";
- Client client=new Client();
- // File file=new File("I:/1/a.txt");
- File file=new File("I:/1/pase/90s_9.wav");
- FileInputStream fis=new FileInputStream(file);
- SocketChannel socketChannel=client.createSocketChannel(ip, port);
- client.sendStringData(socketChannel, "POST /project/uploader HTTP/1.1\r\n");
- client.sendStringData(socketChannel, "Accept: */*\r\n");
- client.sendStringData(socketChannel, "User-Agent: Mozilla/4.0\r\n");
- // client.sendStringData(socketChannel, "Content-Length: "+(file.length()+parameter.length())+"\r\n");
- client.sendStringData(socketChannel, "Transfer-Encoding: chunked\r\n");
- client.sendStringData(socketChannel, "Accept-Language: en-us\r\n");
- client.sendStringData(socketChannel, "Accept-Encoding: gzip, deflate\r\n");
- client.sendStringData(socketChannel, "Host: 127.0.0.1\r\n");
- client.sendStringData(socketChannel, "Content-Type: multipart/form-data;boundary=----------V2ynHFg03ehbqgZCaKO6jy\r\n");
- //send file1449930
- client.sendDataChunk(socketChannel, fis);
- while(true){
- System.out.println("read start....");
- ByteBuffer bb=ByteBuffer.allocate(200);
- boolean flag=client.readData(socketChannel, bb);
- byte[] b=new byte[bb.limit()];
- bb.get(b, 0, bb.limit()-1);
- System.out.println(new String(b,"UTF-8"));
- if(!flag){
- System.out.println("socket close....");
- client.closeSocketChannel(socketChannel);
- break;
- }
- }
- System.out.println("read data end....");
- System.exit(0);
- }
- }
http stream的更多相关文章
- SQL Server-聚焦查询计划Stream Aggregate VS Hash Match Aggregate(二十)
前言 之前系列中在查询计划中一直出现Stream Aggregate,当时也只是做了基本了解,对于查询计划中出现的操作,我们都需要去详细研究下,只有这样才能对查询计划执行的每一步操作都了如指掌,所以才 ...
- Node.js:理解stream
Stream在node.js中是一个抽象的接口,基于EventEmitter,也是一种Buffer的高级封装,用来处理流数据.流模块便是提供各种API让我们可以很简单的使用Stream. 流分为四种类 ...
- node中的Stream-Readable和Writeable解读
在node中,只要涉及到文件IO的场景一般都会涉及到一个类-Stream.Stream是对IO设备的抽象表示,其在JAVA中也有涉及,主要体现在四个类-InputStream.Reader.Outpu ...
- nodejs中流(stream)的理解
nodejs的fs模块并没有提供一个copy的方法,但我们可以很容易的实现一个,比如: var source = fs.readFileSync('/path/to/source', {encodin ...
- Node学习笔记(一):stream流操作
NodeJs中谈及较多的可能就是Stream模块了,先写一个简单的ajax回调 $.post("index.php",{data:'aaa',order:'ccc'},functi ...
- Stream
Stream的好处 1.Stream AP的引入弥补了JAVA函数式编程的缺陷.2.Stream相比集合类占用内存更小:集合类里的元素是存储在内存里的,Stream里的元素是在访问的时候才被计算出来. ...
- Stream流
在Node中,存在各式各样不同的数据流,Stream(流)是一个由不同对象实现的抽象接口.例如请求HTTP服务器的request是一个 流,类似于stdout(标准输出):包括文件系统.HTTP 请求 ...
- [LeetCode] Data Stream as Disjoint Intervals 分离区间的数据流
Given a data stream input of non-negative integers a1, a2, ..., an, ..., summarize the numbers seen ...
- [LeetCode] Moving Average from Data Stream 从数据流中移动平均值
Given a stream of integers and a window size, calculate the moving average of all integers in the sl ...
- [LeetCode] Find Median from Data Stream 找出数据流的中位数
Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...
随机推荐
- 8.6 C++文本文件的读写操作
参考:http://www.weixueyuan.net/view/6412.html 总结: 文件类型: 计算机上的文件其实是数据的集合,对文件的读写归根结底还是对数据的读写操作.文件可以大致分为两 ...
- SQL JOIN语法,以及JOIN where 和and区别,还有where和join效率问题。
语法 join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据. Join 和 Key 有时为了得到完整的结果,我们需要从两个或更多的表中获取结果.我们就需要执行 join. 数据库中的表可 ...
- MFC VC++ 根据文件名获取程序的Pid
环境:PC Win7 VS VC++ .MFC 使用,输入文件名即可获取程序的pid,进而可以对程序进行操作,比如关闭Porcess等. 头文件: #include <TlHelp32.h> ...
- flex 1与flex auto
flex意为"弹性布局" 这次主要探究的是flex:1与flex:auto的区别,flex是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 ...
- java学习笔记38(sql注入攻击及解决方法)
上一篇我们写了jdbc工具类:JDBCUtils ,在这里我们使用该工具类来连接数据库, 在之前我们使用 Statement接口下的executeQuery(sql)方法来执行搜索语句,但是这个接口并 ...
- python中Requests库错误和异常
主要有以下四种: 1.Requests抛出一个ConnectionError异常,原因为网络问题(如DNS查询失败.拒接连接等错误) 2.Response.raise_for_status()抛出一个 ...
- [转] Ubuntu16.04完美安装Sublime text3
转载自:https://www.cnblogs.com/hupeng1234/p/6957623.html 1.安装方法 1)使用ppa安装 sudo add-apt-repository ppa:w ...
- Python 实现简易 Shell
什么是shell? (1)shell是一个系统软件,负责用户和操作系统内核之间的交互,是产生进程的进程(通过linux系统调用fork,exec),主要负责解释用户的命令,进而实现用户对进程的控制. ...
- 3.6 html报告乱码问题优化
3.6 html报告乱码问题优化 前言python2用HTMLTestRunner生成测试报告时,有中文输出情况会出现乱码,这个主要是编码格式不统一,改下编码格式就行.下载地址:http://tung ...
- controller向layout传值
Yii2,layout中使用Controller的值,Controller向layout传值的两种方式. yii2中在通过Controller向layout中传值,layout中访问Controlle ...