字节转换、请求工具

时间:2023-01-11 17:17:14

工具类:

  
 
 
  1. import java.io.BufferedReader;  
  2. import java.io.ByteArrayOutputStream;  
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.FileOutputStream;  
  6. import java.io.IOException;  
  7. import java.io.InputStream;  
  8. import java.io.InputStreamReader;  
  9. import java.io.OutputStream;  
  10. import java.net.HttpURLConnection;  
  11. import java.net.URL;  
  12. import java.net.URLConnection;  
  13.  
  14. public class TestTool {  
  15.     /**  
  16.      * 读取指定文件转成字节数组  
  17.      *   
  18.      * Aug 11, 2011  
  19.      * @param 文件的路径  
  20.      * @param 文件的名称  
  21.      * @return 文件内容转成的字节数组  
  22.      * @throws Exception  
  23.      */ 
  24.     public static byte[] read(String path, String fileName) throws Exception {  
  25.         byte[] aaa = getContent(path, fileName);  
  26.         return aaa;  
  27.  
  28.     }  
  29.  
  30.     /**  
  31.      * 发送请求  
  32.      *   
  33.      * Aug 11, 2011  
  34.      * @param 发送的字节数组  
  35.      * @throws 连接异常  
  36.      */ 
  37.     public static void sendHttpRequest(byte[] strRequest) throws Exception {  
  38.  
  39.         URL url = null;  
  40.         HttpURLConnection httpURLConnection = null;  
  41.         OutputStream out = null;  
  42.         // 要请求的URL  
  43.         String strUrl = "http://10.10.92.105:8080/xxx/xxServlet";  
  44.         try {  
  45.             url = new URL(strUrl);  
  46.  
  47.             URLConnection urlcn = url.openConnection();  
  48.  
  49.             if (urlcn instanceof HttpURLConnection) {  
  50.  
  51.                 httpURLConnection = (HttpURLConnection) urlcn;  
  52.  
  53.                 httpURLConnection.setRequestMethod("POST");  
  54.  
  55.                 httpURLConnection.setDoOutput(true);  
  56.                 httpURLConnection.setDoInput(true);  
  57.  
  58.                 httpURLConnection.setConnectTimeout(900000);  
  59.                 httpURLConnection.setReadTimeout(900000);  
  60.  
  61.                 httpURLConnection.setRequestProperty("Content-type",  
  62.                         "application/x-java-serialized-object");  
  63.  
  64.                 out = httpURLConnection.getOutputStream();  
  65.  
  66.                 out.write(strRequest);  
  67.  
  68.                 // 返回状态正常  
  69.                 if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {  
  70.                     System.out.println("----------------------------------------------------");  
  71.                     BufferedReader reader = new BufferedReader(  
  72.                             new InputStreamReader(httpURLConnection  
  73.                                     .getInputStream()));  
  74.                     String line;  
  75.                     StringBuffer str = new StringBuffer();  
  76.                     while ((line = reader.readLine()) != null) {  
  77.                         str.append(line);  
  78.                     }  
  79.                     // 打印应答内容  
  80.                     System.out.println(str.toString());  
  81.                 }  
  82.             }  
  83.  
  84.         } catch (Exception e) {  
  85.             throw new Exception("内部服务器错误");  
  86.         } finally {  
  87.             // 关闭连接  
  88.             if (httpURLConnection != null) {  
  89.                 httpURLConnection.disconnect();  
  90.             }  
  91.             // 关闭流  
  92.             if (out != null) {  
  93.                 try {  
  94.                     out.flush();  
  95.                     out.close();  
  96.                 } catch (IOException e) {  
  97.                     throw new Exception("内部服务器错误");  
  98.                 }  
  99.             }  
  100.         }  
  101.     }  
  102.  
  103.     /**  
  104.      * 往文件里写byte数组  
  105.      *   
  106.      * Aug 11, 2011  
  107.      * @param 需要写入的数组  
  108.      * @param 写入文件的路径  
  109.      * @param 写入文件的文件名  
  110.      */ 
  111.     public static void write(byte[] bt, String filePath, String fileName) {  
  112.         //File file = new File("D:", "mm");  
  113.         File file = new File(filePath, fileName);  
  114.  
  115.         OutputStream oo = null;  
  116.         try {  
  117.             oo = new FileOutputStream(file, true);  
  118.             oo.write(bt);  
  119.         } catch (Exception e) {  
  120.             e.printStackTrace();  
  121.         } finally {  
  122.             if (oo != null) {  
  123.                 try {  
  124.                     oo.flush();  
  125.                     oo.close();  
  126.                 } catch (Exception e) {  
  127.                     e.printStackTrace();  
  128.                 }  
  129.             }  
  130.         }  
  131.     }  
  132.  
  133.     /**  
  134.      *   
  135.      * 获取有符号数的8个bit位  
  136.      * Aug 11, 2011  
  137.      * @param b  
  138.      * @return  
  139.      */ 
  140.     public static String getBit(byte b) {  
  141.         StringBuffer sbf = new StringBuffer();  
  142.         int[] bit = new int[8];  
  143.         for (int i = 0; i < bit.length; i++) {  
  144.             bit[8 - i - 1] = (b >> i) & 1;  
  145.         }  
  146.         for (int i : bit) {  
  147.             sbf.append(i);  
  148.         }  
  149.         return sbf.toString();  
  150.  
  151.     }  
  152.  
  153.     /**  
  154.      * 将有符号数转换为无符号数  
  155.      *   
  156.      * Aug 11, 2011  
  157.      * @author 吕建明  
  158.      * @param p 需要转换的字节  
  159.      * @return  
  160.      */ 
  161.     public static int getU1(byte p) {  
  162.         return p & 0xff;  
  163.     }  
  164.  
  165.     /**  
  166.      *   
  167.      * <p>Discription:[将无符号数转换为有符号数]</p>  
  168.      * @param intValue  
  169.      * @return  
  170.      * @author:[创建者中文名字]  
  171.      * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]  
  172.      */ 
  173.     public static int getIntA(int intValue) {  
  174.         int byteValue;  
  175.         int temp = intValue % 256;  
  176.         if (intValue < 0) {  
  177.             byteValue = temp < -128 ? 256 + temp : temp;  
  178.         } else {  
  179.             byteValue = temp > 127 ? temp - 256 : temp;  
  180.         }  
  181.         return byteValue;  
  182.     }  
  183.  
  184.     /**  
  185.      *   
  186.      * <p>Discription:[获取文件的字节流]</p>  
  187.      * @param filePath 文件的路径  
  188.      * @param fileName 文件名称  
  189.      * @return 文件被容转换成的字节数组  
  190.      * @author:[创建者中文名字]  
  191.      * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]  
  192.      */ 
  193.     private static byte[] getContent(String filePath, String fileName) {  
  194.         File file = new File(filePath, fileName);  
  195.         InputStream strm = null;  
  196.         ByteArrayOutputStream baos = new ByteArrayOutputStream();  
  197.         try {  
  198.             byte[] ll = new byte[1024];  
  199.             strm = new FileInputStream(file);  
  200.             int len = -1;  
  201.             while ((len = strm.read(ll)) != -1) {  
  202.                 baos.write(ll, 0, len);  
  203.             }  
  204.         } catch (Exception e1) {  
  205.             e1.printStackTrace();  
  206.         }  
  207.         return baos.toByteArray();  
  208.     }  
  209.  
  210. }  

 

 

测试主函数:

  
 
 
  1.  
  2. public class TestMain {  
  3.  
  4.     /**  
  5.      *   
  6.      * Aug 11, 2011  
  7.      * @param args  
  8.      * @throws Exception   
  9.      */ 
  10.     public static void main(String[] args) throws Exception {  
  11.         byte a = -1;  
  12.           
  13.         // 获取有符号位的8个bit位  
  14.         System.out.println(TestTool.getBit(a));  
  15.  
  16.         // 将有符号数转换为无符号数(正整数还是自己本身)  
  17.         System.out.println(TestTool.getU1(a));  
  18.           
  19.         // 将无符号数转换为有符号数(0-255)  
  20.         System.out.println(TestTool.getIntA(255));  
  21.           
  22.           
  23.         byte[] bt = new byte[]{-1};  
  24.         //往文件里写byte数组  
  25.         TestTool.write(bt, "D:""11");  
  26.           
  27.           
  28.           
  29.         // 读取指定文件转成字节数组  
  30.         byte[] bread = TestTool.read("D:""mm");  
  31.         for(int i = 0; i< bread.length; i++){  
  32.             System.out.println(bread[i]+"-"+TestTool.getBit(bread[i]));  
  33.         }  
  34.           
  35.         // 发送请求  
  36.         TestTool.sendHttpRequest(bread);  
  37.     }  
  38.  
  39. }  

 

本文出自 “司徒建明” 博客,请务必保留此出处http://yujie020.blog.51cto.com/2827685/636835