Java基础知识回顾-9

1.list转set 

Java代码    收藏代码
  1. Set set = new HashSet(new ArrayList());  

 2.set转list 

Java代码    收藏代码
  1. List list = new ArrayList(new HashSet());  

 

3.数组转为list 

Java代码    收藏代码
  1. List stooges = Arrays.asList("Larry""Moe""Curly");  

 此时stooges中有有三个元素。注意:此时的list不能进行add操作,否则会报“java.lang.UnsupportedOperationException”,Arrays.asList()返回的是List,而且是一个定长的List,所以不能转换为ArrayList,只能转换为AbstractList 
原因在于asList()方法返回的是某个数组的列表形式,返回的列表只是数组的另一个视图,而数组本身并没有消失,对列表的任何操作最终都反映在数组上. 所以不支持remove,add方法的 

 

Java代码    收藏代码
  1. String[] arr = {"1""2"};  
  2. List list = Arrays.asList(arr);  

 

 

4.数组转为set 

Java代码    收藏代码
  1. int[] a = { 123 };  
  2. Set set = new HashSet(Arrays.asList(a));  

 

5.map的相关操作。

Java代码    收藏代码
  1. Map map = new HashMap();  
  2. map.put("1""a");  
  3. map.put('2''b');  
  4. map.put('3''c');  
  5. System.out.println(map);  
  6. // 输出所有的值  
  7. System.out.println(map.keySet());  
  8. // 输出所有的键  
  9. System.out.println(map.values());  
  10. // 将map的值转化为List  
  11. List list = new ArrayList(map.values());  
  12. System.out.println(list);  
  13. // 将map的值转化为Set  
  14. Set set = new HashSet(map.values());  
  15. System.out.println(set);  

 

6.list转数组

Java代码    收藏代码
  1. List list = Arrays.asList("a","b");  
  2. System.out.println(list);  
  3.           
  4. String[] arr = (String[])list.toArray(new String[list.size()]);  
  5. System.out.println(Arrays.toString(arr));  

7、文件读取

  
  
  
  
  1. public String readFile(String fileName) throws Exception { 
  2.    String fileContent = ""
  3.    File f = new File(fileName); 
  4.    FileReader fileReader = new FileReader(f); 
  5.    BufferedReader reader = new BufferedReader(fileReader); 
  6.    String line = ""
  7.    while (line = reader.readLine() != null) { 
  8.      String fileContent = fileContent + line; 
  9.    } 
  10.    reader.close(); 
  11.    return fileContent; 
  12.  } 

 8、httpclient获取资源

  
  
  
  
  1. HttpClient httpClient = new HttpClient(); 
  2.             GetMethod getMethod = new GetMethod("http://www.sina.com.cn/"); 
  3.             //getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler()); 
  4.              
  5.             try { 
  6.                 int statusCode = httpClient.executeMethod(getMethod); 
  7.                 if (statusCode == HttpStatus.SC_OK) { 
  8.                     byte[] body = getMethod.getResponseBody(); 
  9.                     String content = new String(body); 
  10.                     System.out.println(content); 
  11.                 } 
  12.             } catch (HttpException e) { 
  13.                 e.printStackTrace(); 
  14.             } catch (IOException e) { 
  15.                 e.printStackTrace(); 
  16.             } 

9、retry保障功能的健壮性

  
  
  
  
  1. private static Logger logger = LoggerFactory.getLogger(Retry.class); 
  2. private static int retryTimes = 10
  3.  
  4. public static void main(String[] args) { 
  5.     StringBuffer errorMsg = new StringBuffer(); 
  6.     for (int i = 0; i <= retryTimes; i++) { 
  7.         HttpClient httpClient = new HttpClient(); 
  8.         GetMethod getMethod = new GetMethod("http://www.bai000000000000.com/"); 
  9.         //getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler()); 
  10.  
  11.         try { 
  12.             int statusCode = httpClient.executeMethod(getMethod); 
  13.             if (statusCode == HttpStatus.SC_OK) { 
  14.                 byte[] body = getMethod.getResponseBody(); 
  15.                 String content = new String(body); 
  16.                 System.out.println(content); 
  17.                 break
  18.             } 
  19.  
  20.         } catch (Exception e) { 
  21.             if (i >= retryTimes) { 
  22.                 errorMsg.append("after ").append(retryTimes) 
  23.                         .append(" times retry, still failed to connect the url"); 
  24.                 logger.error(errorMsg.toString(),e); 
  25.                 throw new RuntimeException(errorMsg.toString(), e); 
  26.             } 
  27.             logger.warn("connect the url " + i + " time.",e); 
  28.         } 
  29.     } 
  30.  

10、BufferedImage image与byte之间转换

请问怎么从BufferedImage image得到byte[]数据。
我现在已经有BufferedImage   image,   怎么得到一个byte[]的数组呢?? 

但是不要经过文件转。否则太慢了了。

------解决方案--------------------------------------------------------
BufferedImage srcImage = ImageIO.read(new File( "c:/xxx.jpg ")); 
byte[] data = ((DataBufferByte) srcImage.getData().getDataBuffer()).getData(); 
------解决方案--------------------------------------------------------
一个BufferedImage可以得一个Int[]数组.用它的getRGB方法.取得的是它的相素信息. 
从一个int[]到BufferedImage可以用MemoryImageSource. 

我想取得byte[]数组是没有什么意义的.当然不是不可以实现.用ImageIO类. 
BufferedImage bi=ImageIO.read(new ByteArrayInputSream(byte[]); 
ImageIO.write(bufferedImage, "gif ",new ByteArrayOutputStream(new byte[20000]));然后你就可以从这个ByteArrayOutputStream取得你想要的byte啦! 
不过这样一点意义也没有,你无法改任何相素.

11、获取完整的请求路径

  
  
  
  
  1. String url = req.getRequestURL().toString(); 
  2.       String queryString = req.getQueryString(); 
  3.       System.out.println(url + "?" + queryString); 

如:http://localhost:8080/MyServlet??q=a?q1=a1 

12、标准String数组输出

  
  
  
  
  1. private static String toString(String[] fileNames) { 
  2.         StringBuffer outline = new StringBuffer("["); 
  3.         for (int i = 0; i < fileNames.length; i++) { 
  4.             outline.append(fileNames[i]); 
  5.             if (i != fileNames.length - 1) 
  6.                 outline.append(","); 
  7.         } 
  8.         outline.append("]"); 
  9.         return outline.toString(); 
  10.     } 

13、从request中获取servletContext(即application)

request.getSession().getServletContext();

14、初始化日志写法

在strtus2中FilterDispatcher类中的写法

  
  
  
  
  1. private Logger log; 
  2.  
  3.  private void initLogging() { 
  4.         String factoryName = filterConfig.getInitParameter("loggerFactory"); 
  5.         if (factoryName != null) { 
  6.             try { 
  7.                 Class cls = ClassLoaderUtil.loadClass(factoryName, this.getClass()); 
  8.                 LoggerFactory fac = (LoggerFactory) cls.newInstance(); 
  9.                 LoggerFactory.setLoggerFactory(fac); 
  10.             } catch (InstantiationException e) { 
  11.                 System.err.println("Unable to instantiate logger factory: " + factoryName + ", using default"); 
  12.                 e.printStackTrace(); 
  13.             } catch (IllegalAccessException e) { 
  14.                 System.err.println("Unable to access logger factory: " + factoryName + ", using default"); 
  15.                 e.printStackTrace(); 
  16.             } catch (ClassNotFoundException e) { 
  17.                 System.err.println("Unable to locate logger factory class: " + factoryName + ", using default"); 
  18.                 e.printStackTrace(); 
  19.             } 
  20.         } 
  21.  
  22.         log = LoggerFactory.getLogger(FilterDispatcher.class); 
  23.  
  24.     } 

15、警告写法:Spring中样例开头大写,无.结尾

 

Assert.notNull(paths, "Path array must not be null");

Assert.notNull(clazz, "Class argument must not be null"); 

16、URL的编解码

  
  
  
  
  1. try { 
  2.           String codes = URLEncoder.encode("卓越 新书C#入门""UTF-8"); 
  3.           System.out.println(codes); 
  4.           String text = URLDecoder.decode(codes, "UTF-8"); 
  5.           System.out.println(text); 
  6.       } catch (UnsupportedEncodingException e) { 
  7.           e.printStackTrace(); 
  8.       } 

17、十六进制转换与Long的相互转换

  
  
  
  
  1. String a = "32cda6f174e3"
  2.        String b= "374ccd2f2496"
  3.        long l = Long.valueOf(a, 16); 
  4.        l += Long.valueOf(b, 16); 
  5.        System.out.println(Long.toHexString(l)); 

MD5中一部分进行运算

18、将byte[]编码为16进制的字符串

  
  
  
  
  1. private String encodeHex(byte[] data) { 
  2.        final char[] toDigits = {'0''1''2''3''4''5'
  3.                '6''7''8''9''a''b''c''d''e''f'}; 
  4.        int l = data.length; 
  5.        char[] out = new char[l << 1]; 
  6.        // two characters form the hex value. 
  7.        for (int i = 0, j = 0; i < l; i++) { 
  8.            out[j++] = toDigits[(0xF0 & data[i]) >>> 4]; 
  9.            out[j++] = toDigits[0x0F & data[i]]; 
  10.        } 
  11.        return new String(out); 
  12.    } 

19、获取执行时当前行的行号、方法、类

  
  
  
  
  1. new Throwable().getStackTrace()[0].getLineNumber() 
  2. new Throwable().getStackTrace()[0].getClassName() 
  3. new Throwable().getStackTrace()[0].getMethodName() 

20、Java中的回调:定义接口,让调用者去实现,最后调到调用者自己写的实现 -- 回调

如果我们要测试一个类的方法的执行时间,通常我们会这样做:

java 代码
 
  1. public   class  TestObject {  
  2.     /**  
  3.      * 一个用来被测试的方法,进行了一个比较耗时的循环  
  4.      */   
  5.     public   static   void  testMethod(){  
  6.         for ( int  i= 0 ; i< 100000000 ; i++){  
  7.               
  8.         }  
  9.     }  
  10.     /**  
  11.      * 一个简单的测试方法执行时间的方法  
  12.      */   
  13.     public   void  testTime(){  
  14.         long  begin = System.currentTimeMillis(); //测试起始时间   
  15.         testMethod(); //测试方法   
  16.         long  end = System.currentTimeMillis(); //测试结束时间   
  17.         System.out.println("[use time]:"  + (end - begin)); //打印使用时间   
  18.     }  
  19.       
  20.     public   static   void  main(String[] args) {  
  21.         TestObject test=new  TestObject();  
  22.         test.testTime();  
  23.     }  
  24. }  


大家看到了testTime()方法,就只有"//测试方法"是需要改变的,下面我们来做一个函数实现相同功能但更灵活:

首先定一个回调接口:

java 代码
 
  1. public   interface  CallBack {  
  2.     //执行回调操作的方法   
  3.     void  execute();  
  4. }  


然后再写一个工具类:

java 代码
 
  1. public   class  Tools {  
  2.       
  3.     /**  
  4.      * 测试函数使用时间,通过定义CallBack接口的execute方法  
  5.      * @param callBack  
  6.      */   
  7.     public   void  testTime(CallBack callBack) {  
  8.         long  begin = System.currentTimeMillis(); //测试起始时间   
  9.         callBack.execute(); ///进行回调操作   
  10.         long  end = System.currentTimeMillis(); //测试结束时间   
  11.         System.out.println("[use time]:"  + (end - begin)); //打印使用时间   
  12.     }  
  13.       
  14.     public   static   void  main(String[] args) {  
  15.         Tools tool = new  Tools();  
  16.         tool.testTime(new  CallBack(){  
  17.             //定义execute方法   
  18.             public   void  execute(){  
  19.                 //这里可以加放一个或多个要测试运行时间的方法   
  20.                 TestObject.testMethod();  
  21.             }  
  22.         });  
  23.     }  
  24.       
  25. }  


大家看到,testTime()传入定义callback接口的execute()方法就可以实现回调功能

 

你可能感兴趣的:(java)