(一)这里可以先复习一下java输入输出流和文件操作---

1.File类保存文件或目录的各种元数据信息,包括文件名、文件长度、最后修改时间、是否可读、获取当前文件的路径名。判断指定文件是否存在、获取当前目录中的文件列表,创建、删除文件和目录等。

2.I/O流 根据处理数据类型的不同分为:字符流和字节流

根据数据流向不同分为:输入流和输出流

(二)在JAVA里面,可以用复制语句”A=B”给基本类型的数据传递值,但是如果A,B是两个同类型的数组,复制就相当于将一个数组变量的引用传递给另一个数组;如果一个数组发生改变,那么引用同一数组的变量也要发生改变.
以下是归纳的JAVA中复制数组的方法:
1.使用FOR循环,将数组的每个元素复制或者复制指定元素,不过效率差一点
2.使用clone方法,得到数组的值,而不是引用,不能复制指定元素,灵活性差一点
3.使用System.arraycopy(src, srcPos, dest, destPos, length)方法,推荐使用
举例:
1.使用FOR循环
int[] src={1,3,5,6,7,8};
int[] dest = new int[6];
for(int i=0;i<6;i++) dest[i] = src[i];
2.使用clone
int[] src={1,3,5,6,7,8};
int[] dest;
dest=(int[]) src.clone();//使用clone创建
副本,注意clone要使用强制转换
3.使用System.arraycopy
int[] src={1,3,5,6,7,8};
int[] dest = new int[6];
System.arraycopy(src, 0, dest, 0, 6);
——————————————————————-
System提供了一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制.
其函数原型是:
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

src:源数组; srcPos:源数组要复制的起始位置;
dest:目的数组; destPos:目的数组放置的起始位置;
length:复制的长度.

注意:src and dest都必须是同类型或者可以进行转换类型的数组.
有趣的是这个函数可以实现自己到自己复制,
比如:int[] fun ={0,1,2,3,4,5,6};
System.arraycopy(fun,0,fun,3,3);

则结果为:{0,1,2,0,1,2,6};

(三)下面利用文件流将功能扩充一下

原来的代码只能发送字符串的文字信息。如果要传送文件呢?txt文件?zip文件之类的等等..

可能代码扩充的不是太好,甚至当网络不好的时候还会出现一些问题,但是先将补充好的代码贴一下,后面如果有完善和修正的话再修改。

package bigbang;

import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.ConsumerCancelledException;
import com.rabbitmq.client.QueueingConsumer;
import com.rabbitmq.client.ShutdownSignalException; import com.rabbitmq.client.Connection; import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import java.util.Arrays; import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset; import com.rabbitmq.client.Channel;
class RecvThread extends Thread{
RecvThread(String name){
super(name);//调用父类带参数的构造方法
}
public void run(){
final String QUEUE_NAME = "hello";
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("115.159.181.204");
factory.setPort(5672);
factory.setUsername("admin");
factory.setPassword("admin");
// 打开连接和创建频道,与发送端一样
Connection connection = null;
try {
connection = factory.newConnection();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Channel channel = null;
try {
channel = connection.createChannel();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 声明队列,主要为了防止消息接收者先运行此程序,队列还不存在时创建队列。
try {
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 创建队列消费者 System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
// 指定消费队列
// 指定消费队列
QueueingConsumer consumer = new QueueingConsumer(channel);
try {
channel.basicConsume(QUEUE_NAME, true, consumer);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while(true){
QueueingConsumer.Delivery delivery = null;
try {
delivery = consumer.nextDelivery();
} catch (ShutdownSignalException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ConsumerCancelledException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
byte[] message =delivery.getBody();
//String message = new (delivery.getBody()); try {
OutputStream os=new FileOutputStream("C:/Users/cdmin/Desktop/121.zip",true);
//byte[] buffer=delivery.getBody().length;
try {
os.write(message);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
os.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("file has been received! please scan your desktop!"); //System.out.println(" [x] Received '" + message + "'");
} } } public class zipzip {
private final static String QUEUE_NAME = "hello";
private static Object message;
public static void main(String[] args) throws java.io.IOException {
/**
* 创建连接连接到MabbitMQ
*/
// 设置MabbitMQ所在主机ip或者主机名 ConnectionFactory factory = new ConnectionFactory();
factory.setHost("115.159.181.204");
factory.setPort(5672);
System.out.println("input your username:");
Scanner un=new Scanner(System.in);
String username=null;
username=un.next();
System.out.println("input your password::");
Scanner up=new Scanner(System.in);
String userpassword=null;
userpassword=up.nextLine();
factory.setUsername(username);
factory.setPassword(userpassword);
// 创建一个连接
Connection connection = factory.newConnection();
// 创建一个频道
Channel channel = connection.createChannel();
// 指定一个队列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
// 发送的消息
//String message=null;
//String str=null;
InputStream is =new FileInputStream("C:/Users/cdmin/Desktop/12.zip");
byte[] buffer=new byte[8192];
byte[] message=new byte[8192];
int length=0;
while(-1!=(length=is.read(buffer, 0, 8192))){ //System.out.println(length);
System.arraycopy(buffer,0,message,0, length);
//channel.basicPublish("", QUEUE_NAME, null, message);
//for(int i=0;i<length;i++) message[i] = buffer[i];
//
// str=new String(buffer,0,length);
}
is.close();
//System.out.println(buffer); //byte[] message = str.substring(0, str.length()-1).getBytes(); //System.out.println(message);
//message=str; //Scanner s=new Scanner(System.in); //message=s.nextLine();
// 往队列中发出一条消息
channel.basicPublish("", QUEUE_NAME, null, message);
System.out.println(" [x] Sent '" + "12.zip");
// 关闭频道和连接
channel.close();
connection.close();
RecvThread rthread= new RecvThread("test1");
rthread.start();
} }

运行结果如下:

比如传送一个zip压缩包------

控制台运行结果:

看一下桌面:

我要发送的是12.zip 桌面应该接收到一个12.zip的压缩包 (这里为了区分我把接收到的压缩包命名为121.zip)

RABBITMQ/JAVA 客户端测试(再补:利用文件流)的更多相关文章

  1. RabbitMQ/JAVA 客户端测试(补:利用线程)

    上次进行了简单的连接测试.这次主要进行一下小小的补充.利用线程将生产者消费者代码合到一个文件中. 我是将Recv.java(消费者)文件放在一个线程里添加到Send.java(生产者)中. 代码如下: ...

  2. docker安装fastdfs与java客户端测试

    一.docker 安装FastDFS 1.拉取镜像 docker pull morunchang/fastdfs 2.创建并启动tracker容器 docker run -d --name=track ...

  3. HBase的java客户端测试(二)---DML操作

    测试准备 [首先同步时间:] for node in CloudDeskTop master01 master02 slave01 slave02 slave03;do ssh $node " ...

  4. HBase的java客户端测试(一)---DDL操作

    测试准备 [首先同步时间:] for node in CloudDeskTop master01 master02 slave01 slave02 slave03;do ssh $node " ...

  5. [RabbitMQ]Java客户端:源码概览

    本文简要介绍RabbitMQ提供的Java客户端中最基本的功能性接口/类及相关源码. Mavan依赖: <dependency> <groupId>com.rabbitmq&l ...

  6. RabbitMQ JAVA客户端调用例子

    1.安装erlang 下载地址:http://www.erlang.org/downloads 设置ERLANG环境变量 2.安装RabbitMQ 下载地址: http://www.rabbitmq. ...

  7. HDFS的Java客户端操作代码(HDFS删除文件或目录)

    1.HDFS删除文件或目录 package Hdfs; import java.io.IOException; import java.net.URI; import org.apache.hadoo ...

  8. FastDfs java客户端上传、删除文件

    #配置文件 connect_timeout = 2 network_timeout = 30 charset = UTF-8 http.tracker_http_port = 9090 http.an ...

  9. 用java pyhont通过HTTP协议传输文件流

    // 代码网上抄的 忘记链接了 抱歉哈package upload; import java.io.BufferedReader; import java.io.DataOutputStream; i ...

随机推荐

  1. WordCount示例深度学习MapReduce过程(1)

    我们都安装完Hadoop之后,按照一些案例先要跑一个WourdCount程序,来测试Hadoop安装是否成功.在终端中用命令创建一个文件夹,简单的向两个文件中各写入一段话,然后运行Hadoop,Wou ...

  2. 两个img之间出现间隙的解决方法

    今天写了个小页面,发现了一个问题,两个包在a标签里的img之间总是有间隙,不能挨在一起,最后在同事的帮助下,找到解决的办法是,设置img的基线,css代码如下: img{vertical-align: ...

  3. Cenos(6.6/7.1)下从源码安装Python+Django+uwsgi+nginx到写nginx的环境部署(一)

    梳理下这几个的关系: centos是redhat的社区版操作系统. Python2.7.5是开发语言(centos6.5下自带的python是2.6.6版本,所以需要源码更新,而centos7.1下面 ...

  4. Spring 定时任务1

    转载自 http://blog.csdn.net/prisonbreak_/article/details/49180307 Spring配置文件xmlns加入 xmlns:task="ht ...

  5. EasyUI中动态生成标签页

    这是最近学到的内容,当时是有思路但是不知道怎么获取当前的点击对象,就没有实现功能,通过更深入的学习,我知道了不仅仅是Java,Oracle中有一个this,同样的EasyUI中也存在一个this,来获 ...

  6. 让下拉框中同时显示Key与Value

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  7. EasyUi 分页 和 表格数据加载

    这里说明的是将说有数据先返回到前端再由前端去分页,性能可能没有先在后台分好页再返回给前端高 但如果操作不涉及大数据的话也没什么大问题,具体问题具体分析 要使用分页控件首先要声明初始化一下: //设置分 ...

  8. js正则表达式入门

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  9. cordova环境搭建,搭建项目,以及拍照功能的实现

    一.配置环境 1.配置java环境: 下载对应系统环境的jdk:http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-13 ...

  10. Loom工具使用分享

    Unity多线程(Thread)和主线程(MainThread)交互使用类——Loom工具分享 时间 2014-03-09 11:04:04  ITeye-博客 原文  http://dsqiu.it ...