(一)这里可以先复习一下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文件之类的等等..

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

  1. package bigbang;
  2.  
  3. import com.rabbitmq.client.ConnectionFactory;
  4. import com.rabbitmq.client.ConsumerCancelledException;
  5. import com.rabbitmq.client.QueueingConsumer;
  6. import com.rabbitmq.client.ShutdownSignalException;
  7.  
  8. import com.rabbitmq.client.Connection;
  9.  
  10. import java.io.File;
  11. import java.io.IOException;
  12. import java.util.Scanner;
  13. import java.util.Arrays;
  14.  
  15. import java.io.FileInputStream;
  16. import java.io.FileNotFoundException;
  17. import java.io.FileOutputStream;
  18. import java.io.IOException;
  19. import java.io.InputStream;
  20. import java.io.OutputStream;
  21. import java.nio.ByteBuffer;
  22. import java.nio.CharBuffer;
  23. import java.nio.charset.Charset;
  24.  
  25. import com.rabbitmq.client.Channel;
  26. class RecvThread extends Thread{
  27. RecvThread(String name){
  28. super(name);//调用父类带参数的构造方法
  29. }
  30. public void run(){
  31. final String QUEUE_NAME = "hello";
  32. ConnectionFactory factory = new ConnectionFactory();
  33. factory.setHost("115.159.181.204");
  34. factory.setPort(5672);
  35. factory.setUsername("admin");
  36. factory.setPassword("admin");
  37. // 打开连接和创建频道,与发送端一样
  38. Connection connection = null;
  39. try {
  40. connection = factory.newConnection();
  41. } catch (IOException e) {
  42. // TODO Auto-generated catch block
  43. e.printStackTrace();
  44. }
  45. Channel channel = null;
  46. try {
  47. channel = connection.createChannel();
  48. } catch (IOException e) {
  49. // TODO Auto-generated catch block
  50. e.printStackTrace();
  51. }
  52.  
  53. // 声明队列,主要为了防止消息接收者先运行此程序,队列还不存在时创建队列。
  54. try {
  55. channel.queueDeclare(QUEUE_NAME, false, false, false, null);
  56. } catch (IOException e) {
  57. // TODO Auto-generated catch block
  58. e.printStackTrace();
  59. }
  60. // 创建队列消费者
  61.  
  62. System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
  63. // 指定消费队列
  64. // 指定消费队列
  65. QueueingConsumer consumer = new QueueingConsumer(channel);
  66. try {
  67. channel.basicConsume(QUEUE_NAME, true, consumer);
  68. } catch (IOException e) {
  69. // TODO Auto-generated catch block
  70. e.printStackTrace();
  71. }
  72. while(true){
  73. QueueingConsumer.Delivery delivery = null;
  74. try {
  75. delivery = consumer.nextDelivery();
  76. } catch (ShutdownSignalException e) {
  77. // TODO Auto-generated catch block
  78. e.printStackTrace();
  79. } catch (ConsumerCancelledException e) {
  80. // TODO Auto-generated catch block
  81. e.printStackTrace();
  82. } catch (InterruptedException e) {
  83. // TODO Auto-generated catch block
  84. e.printStackTrace();
  85. }
  86. byte[] message =delivery.getBody();
  87. //String message = new (delivery.getBody());
  88.  
  89. try {
  90. OutputStream os=new FileOutputStream("C:/Users/cdmin/Desktop/121.zip",true);
  91. //byte[] buffer=delivery.getBody().length;
  92. try {
  93. os.write(message);
  94. } catch (IOException e) {
  95. // TODO Auto-generated catch block
  96. e.printStackTrace();
  97. }
  98. try {
  99. os.close();
  100. } catch (IOException e) {
  101. // TODO Auto-generated catch block
  102. e.printStackTrace();
  103. }
  104.  
  105. } catch (FileNotFoundException e) {
  106. // TODO Auto-generated catch block
  107. e.printStackTrace();
  108. }
  109. System.out.println("file has been received! please scan your desktop!");
  110.  
  111. //System.out.println(" [x] Received '" + message + "'");
  112. }
  113.  
  114. }
  115.  
  116. }
  117.  
  118. public class zipzip {
  119. private final static String QUEUE_NAME = "hello";
  120. private static Object message;
  121. public static void main(String[] args) throws java.io.IOException {
  122. /**
  123. * 创建连接连接到MabbitMQ
  124. */
  125. // 设置MabbitMQ所在主机ip或者主机名
  126.  
  127. ConnectionFactory factory = new ConnectionFactory();
  128. factory.setHost("115.159.181.204");
  129. factory.setPort(5672);
  130. System.out.println("input your username:");
  131. Scanner un=new Scanner(System.in);
  132. String username=null;
  133. username=un.next();
  134. System.out.println("input your password::");
  135. Scanner up=new Scanner(System.in);
  136. String userpassword=null;
  137. userpassword=up.nextLine();
  138. factory.setUsername(username);
  139. factory.setPassword(userpassword);
  140. // 创建一个连接
  141. Connection connection = factory.newConnection();
  142. // 创建一个频道
  143. Channel channel = connection.createChannel();
  144. // 指定一个队列
  145. channel.queueDeclare(QUEUE_NAME, false, false, false, null);
  146. // 发送的消息
  147. //String message=null;
  148. //String str=null;
  149. InputStream is =new FileInputStream("C:/Users/cdmin/Desktop/12.zip");
  150. byte[] buffer=new byte[8192];
  151. byte[] message=new byte[8192];
  152. int length=0;
  153. while(-1!=(length=is.read(buffer, 0, 8192))){
  154.  
  155. //System.out.println(length);
  156. System.arraycopy(buffer,0,message,0, length);
  157. //channel.basicPublish("", QUEUE_NAME, null, message);
  158. //for(int i=0;i<length;i++) message[i] = buffer[i];
  159. //
  160. // str=new String(buffer,0,length);
  161. }
  162. is.close();
  163. //System.out.println(buffer);
  164.  
  165. //byte[] message = str.substring(0, str.length()-1).getBytes();
  166.  
  167. //System.out.println(message);
  168. //message=str;
  169.  
  170. //Scanner s=new Scanner(System.in);
  171.  
  172. //message=s.nextLine();
  173. // 往队列中发出一条消息
  174. channel.basicPublish("", QUEUE_NAME, null, message);
  175. System.out.println(" [x] Sent '" + "12.zip");
  176. // 关闭频道和连接
  177. channel.close();
  178. connection.close();
  179. RecvThread rthread= new RecvThread("test1");
  180. rthread.start();
  181. }
  182.  
  183. }

运行结果如下:

比如传送一个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. Codeforces Round #374 (div.2)遗憾题合集

    C.Journey 读错题目了...不是无向图,结果建错图了(喵第4样例是变成无向就会有环的那种图) 并且这题因为要求路径点尽可能多 其实可以规约为限定路径长的拓扑排序,不一定要用最短路做 #prag ...

  2. poj 1091 跳蚤

    跳蚤 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8482   Accepted: 2514 Description Z城 ...

  3. [问题2014A10] 解答

    [问题2014A10]  解答 考虑如下变形: \[(I_n-A)^2=(AA'-A)(I_n-A)=A(A'-I_n)(I_n-A)=-A(I_n-A)'(I_n-A).\] 因为 \(A\) 是非 ...

  4. MySql数据库-使用cmd操作数据库

    寄语: 针对一些公司对测试岗位掌握SQL的要求,本博文以此献给没有掌握数据库语句知识的功能测试人员,愿与广大测试同胞共同进步. 如果电脑上已安装配置好MySQL数据库,打开命令提示符,按照下图以此操作 ...

  5. jquery.validate使用 - 自定义验证方法

    自定义jquery-validate的验证行为 1: 自定义表单提交 设置submitHandler来自定义表单提交动作 $(".selector").validate({    ...

  6. 关于Youtube URL的十个技巧

    你一定很熟悉Youtube了,知道它是一个视频分享网站.是的,youtube目前十分流行,你也许会常常访问.这里有一些关于youtube url的技巧,了解了这些技巧,你就可以更好的利用youtube ...

  7. SQL Prompt自定义代码片段

    新增代码片段: 代码片段管理: 代码片段中可以使用以下占位符:详见参考: $DATE$ 插入当前日期. $TIME$ 插入当前时间 $USER$ 插入当前电脑的用户名 $PASTE$ 插入剪切板内容 ...

  8. Linux架构

    Linux架构   作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我以下图为基础,说明Linux的架构(architecture ...

  9. 《BI项目笔记》创建时间维度(2)

    创建步骤:   序号 选择的属性 重命名后的名称 属性类别 1 DateKey DateKey 常规 2 Month Key Month Key 月份 3 English Month Name Eng ...

  10. Flex debug版本浏览器选定问题

    原来都用IE进行调试的,今天安装了火狐浏览器,结果出现调试器找不到的错误,如下图 需要做下面设置 "窗口"—>"首选参数",下图位置勾选项改为IE,问题就 ...