zoukankan      html  css  js  c++  java
  • RABBITMQ/JAVA 客户端测试(再补:利用文件流)

    (一)这里可以先复习一下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)

  • 相关阅读:
    (打包报错)AS打包报错:Generate Signed APK: Errors while building APK. You can find the errors in the 'Messages' view.
    NABCD
    石家庄地铁站项目最终总结报告
    团队冲刺2.7
    团队冲刺2.6
    团队冲刺2.5
    团队冲刺2.4
    团队冲刺2.3
    用户体验评价——win10自带微软拼音输入法
    团队冲刺2.2
  • 原文地址:https://www.cnblogs.com/tinmh/p/6134120.html
Copyright © 2011-2022 走看看