摘要:java多线程编程中,存在很多线程安全问题,至于什么是线程安全呢,给出一个通俗易懂的概念还是蛮难的,如同《java并发编程实践》中所说:写道 给线程安全下定义比较困难。存在很多种定义,如:“一个类在可以被多个线程安全调用时就是线程安全的”。此处不赘述了,首先给出静态变量、实例变量、局部变量在多线程环境下的线程安全问题结论,然后用示例验证,请大家擦亮眼睛,有错必究,否则误人子弟!静态变量:线程非安全。静态变量即类变量,位于方法区,为所有对象共享,共享一份内存,一旦静态变量被修改,其他对象均对修改可见,故线程非安全。实例变量:单例模式(只有一个对象实例存在)线程非安全,非单例线程安全。实例变量为对 阅读全文
posted @ 2013-04-11 14:48 一筐 阅读 (154) 评论 (0) 编辑
摘要:由maven构建项目,需要引入两个包,配置代码如下:<dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>2.1</version> </dependency> <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> 阅读全文
posted @ 2013-04-11 14:05 一筐 阅读 (4818) 评论 (0) 编辑
摘要:有怪癖的程序猿总是喜欢翻看自己以前的code,总是希望从中找出可以重构的和共享的部分,为了让我们的code最大限度的精简,泛型和反射是两个必须要掌握的技巧。Java由于各种原因导致我们在做web开发时做的比较大的一部分工作是数据类型转化,为了减少我们的工作量,我们就希望提高这部分的code的重用性,泛型大发神威的时候来了,下面举个例子来说明。例如有两个List,List<RoigBean> 和List<DestBean>,RoigBean和DestBean是两个普通的Java Bean,这两个Bean之间的属性存在相同的,这时我们需要将我们需要将List<Roig 阅读全文
posted @ 2013-04-10 12:17 一筐 阅读 (830) 评论 (0) 编辑
摘要:/*线程同步之生产者-消费者模型该模型符合以下要求:1、生产者只在仓储未满时生产,仓满则停止生产;2、消费者只在仓储未空时消费,仓空则等待;3、当消费者发现仓储为空时则通知生产者生产;4、生产者在生产出可消费产品时则通知消费者来消费;*/ 1 package one; 2 class Go{ 3 public static final int MAX_NUM=100;//最大库存量 4 private int currennum;//当前库存 5 Go(){} 6 Go(int currennum){ 7 this.currennum=curre... 阅读全文
posted @ 2013-04-09 10:18 一筐 阅读 (130) 评论 (0) 编辑
摘要:Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率。Eclipse中有如下一些和编辑相关的快捷键。 1. 【ALT+/】 此快捷键为用户编辑的好帮手,能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁,当记不全类、方法和属性的名字时,多体验一下【ALT+/】快捷键带来的好处吧。 2. 【Ctrl+O】 显示类中方法和属性的大纲,能快速定位类的方法和属性,在查找Bug时非常有用。 3. 【Ctrl+/】 快速添加注释,能为光标所在行或所选定行快速添加注释或取消注释,在调试的时候可能总会需要注释一些东西或取消注释,现在好了,不需要每行进行重复的注释。 4. 阅读全文
posted @ 2013-04-08 18:02 一筐 阅读 (103) 评论 (0) 编辑
摘要:Java可以直接调用Linux命令,形式如下:Runtime.getRuntime().exec(command)举例:运行ls,top命令可以这样:Runtime.getRuntime().exec("ls");但是这样执行时没有任何输出,原因:调用Runtime.exec方法将产生一个本地的进程,并返回一个Process子类的实例,(注意:Runtime.getRuntime().exec(command)返回的是一个Process类的实例),该 实例可用于控制进程或取得进程的相关信息. 由于调用Runtime.exec方法所创建的子进程没有自己的终端或控制台,因此该子 阅读全文
posted @ 2013-04-08 18:01 一筐 阅读 (304) 评论 (0) 编辑
摘要:1 package com.zx.demo.action; 2 import java.util.ArrayList; 3 import java.util.HashMap; 4 import java.util.List; 5 import java.util.Map; 6 import com.opensymphony.xwork2.ActionSupport; 7 import com.zx.demo.model.Product; 8 import com.zx.demo.model.Student; 9 public class MapAction extends ActionSu.. 阅读全文
posted @ 2013-03-29 14:00 一筐 阅读 (648) 评论 (0) 编辑
摘要:虽然线程池能大大提高服务器的并发性能,但使用它也会存在一定风险。与所有多线程应用程序一样,用线程池构建的应用程序容易产生各种并发问题,如对共享资源的竞争和死锁。此外,如果线程池本身的实现不健壮,或者没有合理地使用线程池,还容易导致与线程池有关的死锁、系统资源不足和线程泄漏等问题。 1.死锁 任何多线程应用程序都有死锁风险。造成死锁的最简单的情形是,线程A持有对象X的锁,并且在等待对象Y的锁,而线程B持有对象Y的锁,并且在等待对象X的锁。线程A与线程B都不释放自己持有的锁,并且等待对方的锁,这就导致两个线程永远等待下去,死锁就这样产生了。 虽然任何多线程程序都有死锁的风险,但线程池还会导致... 阅读全文
posted @ 2013-03-26 09:25 一筐 阅读 (95) 评论 (0) 编辑
摘要:项目中,经常会遇到各层对象之间相互进行值传递的过程,如在数据据持久层有一持久类ClassA,在视图层可能会变为ViewA,通常情况下,如果两个类 结构一样,最常使用的是BeanUtils.copyProperties(src,aim)方法将一个对象的值赋给另一个对象!但是如果属性不同或者名 称不同,则需要Dozer来完成,通过灵活的配置,达到不同对象间的拷贝! 如下: 一个XML配置文件:dozerBeanMapping.xml <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mappin 阅读全文
posted @ 2013-03-22 11:13 一筐 阅读 (388) 评论 (0) 编辑
摘要:java 利用Xstream生成和解析xml,知识结构:1.Xstream简介;使用限制: JDK版本不能<1.5. 虽然预处理注解是安全的,但自动侦查注解可能发生竞争条件.特点:简化的API; 无映射文件; 高性能,低内存占用; 整洁的XML; 不需要修改对象;支持内部私有字段,不需要setter/getter方法,final字段;非公有类,内部类;类不需要默认构造器,完全对象图支持.维护对象引用计数,循环引用. i 提供序列化接口; 自定义转换类型策略; 详细的错误诊断; 快速输出格式;当前支持 JSON 和 morphing. 使用场景Transport 转换 Persistenc 阅读全文
posted @ 2013-03-22 10:34 一筐 阅读 (23191) 评论 (0) 编辑
摘要:很少写博客,今天必须得把这个情况写下来。。。。搞了一天。BUG描述:本地测试,正常发送邮件。部署到linux服务器(无中文)后,发送邮件无主题,无收件人,正文中是乱码。我有一篇文章http://www.cnblogs.com/XL-Liang/articles/2843937.html,介绍的是如何使用javamail发送邮件。我在项目中使用的就是这个方式发送邮件。我的项目是使用maven引入包的,pom.xml中的配置如下:<dependency> <groupId>org.apache.geronimo.specs</groupId> <artif 阅读全文
posted @ 2013-01-29 17:48 一筐 阅读 (1549) 评论 (0) 编辑
摘要:@Transactional(noRollbackFor=RuntimeException.class)方法事务说明@Transactional(RollbackFor=Exception.class)@Transactional(readOnly=true)@Transactional(timeout=100)@Transactional(isolation)数据库的隔离级别{ Read Uncommited:读取未提交的数据(会出现脏读不可重复读 幻读) ReadCommited:读已提交的数据(会出现不可重复读和幻读) RepeatableRead:可重复读(会出现幻读) Seriali 阅读全文
posted @ 2012-12-21 14:59 一筐 阅读 (884) 评论 (0) 编辑
摘要:此列统计三种同步锁并发访问时消耗的时间public interface Counter { public long getValue(); public void increment();}/** * 内部锁 */public class SynchronizedBenchmarkDemo implements Counter { private long count = 0; @Override public long getValue() { return count; } @Override public synchroniz... 阅读全文
posted @ 2012-06-14 17:50 一筐 阅读 (392) 评论 (0) 编辑
摘要:当需要对集合同时进行写入和读取操作时,如果多线程同时操作会出现异常,那么现在利用ReadWriteLock显示锁,可以在写入量比较小,读取量比较大的场景中,方便的实现上述功能。import java.util.Calendar;import java.util.Map;import java.util.TreeMap;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantReadWriteLock;/** * 可重入读写锁 */@SuppressWarnings("all&q 阅读全文
posted @ 2012-06-14 17:08 一筐 阅读 (1154) 评论 (0) 编辑
摘要:类java.util.concurrent.Exchanger提供了一个同步点,在这个同步点,一对线程可以交换数据。每个线程通过exchange()方法的入口提供数据给他的伙伴线程,并接收他的伙伴线程提供的数据,并返回。 当在运行不对称的活动时很有用,比如当一个线程填充了buffer,另一个线程从buffer中消费数据的时候,这两个线程可以用Exchanger来交换数据。当两个线程通过Exchanger交换数据的时候,这个交换对于两个线程来说是线程安全的。两个线程都会等到自己的程序运行到Exchanger这个地方时,进行等待。然后再进行数据交换,交换完毕后,各自进行以后的程序流程。 以下这个程 阅读全文
posted @ 2012-06-14 16:28 一筐 阅读 (267) 评论 (0) 编辑
摘要:一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞。之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重置。如果需要重置计数,请考虑使用 CyclicBarrier。CountDownLatch 是一个通用同步工具,它有很多用途。将计数 1 初始化的 CountDownLatch 用作一个简单的开/关锁存器,或入口:在通过调用 countDown() 的线程打开入 阅读全文
posted @ 2012-06-14 16:01 一筐 阅读 (343) 评论 (0) 编辑
摘要:一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环的 barrier。CyclicBarrier 支持一个可选的 Runnable 命令,在一组线程中的最后一个线程到达之后(但在释放所有线程之前),该命令只在每个屏障点运行一次。若在继续所有参与线程之前更新共享状态,此屏障操作 很有用。在实际应用中,有时候需要多个线程同时工作以完成同一件事情,而且在完成过程中,往往会等待 阅读全文
posted @ 2012-06-14 14:56 一筐 阅读 (228) 评论 (0) 编辑
摘要:一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore只对可用许可的号码进行计数,并采取相应的行动。Semaphore 通常用于限制可以访问某些资源(物理或逻辑的)的线程数目。例如,下面的类使用信号量控制对内容池的访问:import java.util.concurrent.Semaphore;public class PoolSemaphoreDemo { private static final... 阅读全文
posted @ 2012-06-14 13:44 一筐 阅读 (331) 评论 (0) 编辑
摘要:构建一个新的线程的代价还是有些高的,因为它涉及与操作系统的交互。如果你的程序创建了大量生存期很短的线程,那就应该使用线程池。一个线程池包含大量准备运行的空闲线程。你将一个Runnable对象给线程池,线程池中的一个线程就会调用run方法。当run方法退出时,线程不会死亡,而是继续在池中准备为下一个请求提供服务。执行器(Executor)类有大量用来构建线程池的静态工厂方法,下表给出了一个总结。方法描述newCachedThreadPool在需要时创建新线程:空闲线程会被保留60秒newFixedThreadPool池包含固定数量的线程;空闲线程会一直被保留newSingleThreadExec 阅读全文
posted @ 2012-06-13 18:23 一筐 阅读 (569) 评论 (0) 编辑
摘要:Runnable封装一个异步运行的任务;你可以把它想像成一个没有任何参数和返回值的异步方法。Callable和Runnable相似,但它有返回值。Callable接口是一个参数化的类型,只有一个方法call。public interface Callable<V>{ V call() throws Exception;}类型参数是返回值的类型。例如,Callable<Integer>代表一个最终返回Integer对象的异步计算。 Future保存异步计算的结果。当你使用Future对象时,你就可以启动一个计算,把计算结果给某线程,然后就去干你自己的事。Future对象的 阅读全文
posted @ 2012-06-13 16:04 一筐 阅读 (260) 评论 (0) 编辑
摘要:队列以一种先进先出的方式管理数据。如果你试图向一个已经满了的阻塞队列中添加一个元素,或是从一个空的阻塞队列中移除一个元素,将导致线程阻塞。在多线程进行合作时,阻塞队列是很有用的工具。工作者线程可以定期的把中间结果存到阻塞队列中。而其他工作者线程把中间结果取出并在将来修改它们。队列会自动平衡负载。如果第一个线程集运行的比第二个慢,则第二个线程集在等待结果时就会阻塞。如果第一个线程集运行的快,那么它将等待第二个线程集赶上来。 下面的程序展示了如何使用阻塞队列来控制线程集。程序在一个目录及它的所有子目录下搜索所有文件,打印出包含指定关键字的文件列表。 java.util.concurrent... 阅读全文
posted @ 2012-06-13 15:13 一筐 阅读 (628) 评论 (0) 编辑
摘要:我们的图片大部分都是可以转换成base64编码的data:image。 这个在将canvas保存为img的时候尤其有用。虽然除ie外,大部分现代浏览器都已经支持原生的基于base64的encode和decode,例如btoa和atob。(将canvas画布保存成img并强制改变mimetype进行下载,会在下一篇记录)但是处于好奇心,还是驱使我去了解下base64编码的原理。以便也在不支持原生base64编码的ie下可以得以实现。【Base64】-base64的编码都是按字符串长度,以每3个8bit的字符为一组,-然后针对每组,首先获取每个字符的ASCII编码,-然后将ASCII编码转换成8b 阅读全文
posted @ 2012-06-08 18:05 一筐 阅读 (267) 评论 (0) 编辑
摘要:webservice的原理及概念1 webservice所谓webservice就是定义了一套标准的调用过程:a 服务器首先用一套标准的方法向外界描述它所提供的服务的内容,就属于WSDLb 客户端需要以一种标准的协议来调用此服务,这属于SOAP.c 服务提供者将服务内容放在一个公共的网址让大家查询,就属于UDDI.2 命名空间命名空间其主要目的通过加一个命名属性,使名称保持唯一性。WSDL有大量的使用命名空间的地方。本质上WSDL是一个XML文件,作为一个XML文件,为了区别同名的元素,就需要采用命名空间的概念。3 WSDL的本质:服务内容的标准化描述WSDL的全称是web service D 阅读全文
posted @ 2012-06-08 17:15 一筐 阅读 (13192) 评论 (1) 编辑
摘要:大家可能注意到了,网页上有些图片的src或css背景图片的url后面跟了一大串字符,比如:data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAYAAABIdFAMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHhJREFUeNo8zjsOxCAMBFB/ KEAUFFR0Cbng3nQPw68ArZdAlOZppPFIBhH5EAB8b+Tlt9MYQ6i1BuqFaq1CKSVcxZ2Acs6406KUgpt5/ LCKuVgz5BDCSb13ZO99ZOdcZGvt4m 阅读全文
posted @ 2012-06-01 12:22 一筐 阅读 (8065) 评论 (1) 编辑
摘要:Nginx配置如下:server { listen 8080; server_name www.xxx.com; index index.html index.htm index.php; root /home/wwwroot; location / { resolver 222.166.225.132; proxy_pass ... 阅读全文
posted @ 2012-05-30 15:09 一筐 阅读 (776) 评论 (0) 编辑
摘要:一. 使用cron来定期执行任务首先确认crond服务是否开启:$service crond status如果没有开启请开启,$service crond start1、循环执行的计划任务linux下面有atd和crond两种计划任务,其中,atd服务使用的at命令只能执行一次,而crond服务使用的crontab定义的命令,是循环作用的,所以crond才符合我们的要求。crontab支持两种状态:一、直接编写计划任务;二、使用目录的方式,放在目录里面的都会定时执行。2、可以使用的用户默认情况下,系统中可以登陆的用户,都可以使用crontab定义计划任务。不过,可以通过下面两个文件限制权限:/ 阅读全文
posted @ 2012-05-23 18:51 一筐 阅读 (574) 评论 (0) 编辑
摘要:public String getPostResponse(String url, Map parmMap) { String response = null; PostMethod post = new PostMethod(url); HttpClient client = new HttpClient(); Iterator it = parmMap.entrySet().iterator(); NameValuePair[] param = new NameValuePair[parmMap.size()]; ... 阅读全文
posted @ 2012-05-21 18:56 一筐 阅读 (3453) 评论 (1) 编辑
摘要:1.使用HttpClient用到的jar文件:commons-httpclient-3.1.jar方法:预先定义好Soap请求数据,可以借助于XMLSpy Professional软件来做这一步生成。String soapRequestData = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + "<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" 阅读全文
posted @ 2012-05-21 17:36 一筐 阅读 (598) 评论 (0) 编辑
摘要:TIMESTAMP的变体1,TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 在创建新记录和修改现有记录的时候都对这个数据列刷新2,TIMESTAMP DEFAULT CURRENT_TIMESTAMP 在创建新记录的时候把这个字段设置为当前时间,但以后修改时,不再刷新它3,TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 在创建新记录的时候把这个字段设置为0,以后修改时刷新它4,TIMESTAMP DEFAULT ‘yyyy-mm-dd hh:mm:ss’ ON UPDATE CURREN 阅读全文
posted @ 2012-05-15 11:39 一筐 阅读 (5931) 评论 (0) 编辑
摘要:正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性(由mod_cache提供)减少网络使用率。使用 ProxyRequests指令即可激活正向代理。因为正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。反向代理正好相反,对 阅读全文
posted @ 2012-05-14 10:07 一筐 阅读 (121) 评论 (0) 编辑
摘要:MYSQL数据库安装完成后,默认最大连接数是100,一般流量稍微大一点的论坛或网站这个连接数是远远不够的,增加默认MYSQL连接数的方法有两个方法一:进入MYSQL安装目录 打开MYSQL配置文件 my.ini 或 my.cnf查找 max_connections=100 修改为 max_connections=1000 服务里重起MYSQL即可方法二:MySQL的最大连接数默认是100客户端登录:mysql -uusername -ppassword设置新的最大连接数为200:mysql> set GLOBAL max_connections=200显示当前运行的Query:mysql 阅读全文
posted @ 2012-05-05 15:10 一筐 阅读 (227) 评论 (0) 编辑
摘要:linux zip 命令详解 功能说明:压缩文件。 语 法:zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工作目录>][-ll][-n <字尾字符串>][-t <日期时间>][-<压缩效率>][压缩文件][文件...][-i <范本样式>][-x <范本样式>] 补充说明:zip是个使用广泛的压缩程序,文件经它压缩后会另外产生具有".zip"扩展名的压缩文件。 参 数: -A 调整可执行的自动解压缩文件。 -b<工作目录> 指定暂时存放文件的目录。 -c 替每 阅读全文
posted @ 2012-05-04 13:26 一筐 阅读 (257) 评论 (0) 编辑
摘要:1、登陆mysql数据库 mysql -u root -p 查看user表mysql> use mysql;Database changedmysql> select host,user,password from user;+--------------+------+-------------------------------------------+| host | user | password |+--------------+------+-------------------------------------------+| localhost | root | 阅读全文
posted @ 2012-05-03 21:06 一筐 阅读 (39879) 评论 (0) 编辑
摘要:cat /proc/meminfo 读出的内核信息进行解释:MemTotal: 507480 kBMemFree: 10800 kBBuffers: 34728 kBCached: 98852 kBSwapCached: 128 kBActive: 304248 kBInactive: 46192 kBHighTotal: 0 kBHighFree: 0 kBLowTotal: 507480 kBLowFree: 10800 kBSwapTotal: 979956 kBSwapFree: 941296 kBDirty: 32 kBWriteback: 0 kBAnonPages: 216756 阅读全文
posted @ 2012-04-18 10:21 一筐 阅读 (990) 评论 (0) 编辑
摘要:MySQL的一个系统参数:max_allowed_packet,其默认值为1048576(1M),查询:show VARIABLES like '%max_allowed_packet%';修改此变量的值:MySQL安装目录下的my.ini文件中的[mysqld]段中的"max_allowed_packet = 1M",如更改为4M(或更大,如果没有这行内容,增加一行),保存,重起MySQL服务。现在可以load大于1M的文件了。 阅读全文
posted @ 2012-03-13 18:11 一筐 阅读 (5174) 评论 (0) 编辑
摘要:JSP处理乱码问题是一个痛苦的过程。这次servlet传送文件的乱码折腾了我至少两周。总结如下:1、第一类乱码:就是文件传送过来的文件名等是乱码;但是servlet输出的页面汉字正常显示。解决方法:将传送的JSP页面(即含有表单的页面)的页面编码方式改为:<%@ page contentType="text/html; charset=GB2312" language="java" import="java.sql.*" errorPage="" %><meta http-equiv=" 阅读全文
posted @ 2012-03-12 16:09 一筐 阅读 (1109) 评论 (0) 编辑
摘要:一、源码包准备服务器端主要是安装memcache服务器端,目前的最新版本是 memcached-v1.4.4 。下载:http://memcached.googlecode.com/files/memcached-1.4.4.tar.gz另外,Memcache用到了libevent这个库用于Socket的处理,所以还需要安装libevent,libevent的最新版本是libevent-1.4.13-stable。(如果你的系统已经安装了libevent,可以不用安装)官网:http://www.monkey.org/~provos/libevent/下载:http://www.monkey. 阅读全文
posted @ 2012-02-24 18:11 一筐 阅读 (927) 评论 (0) 编辑
摘要:CentOS Nginx+jdk+tomcat 环境搭建一、jdk安装jdk下载地址:http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html。从上面网页中选择适合的jdk下载到/root/目录下。我选择的是jdk-6u20-linux-i586.bin。下载完后,修改jdk-6u23-linux-i586.bin的文件属性为可执行,然后执行该程序安装JDK:chmod +x jdk-6u20-linux-i586.bin./ jdk-6u 阅读全文
posted @ 2012-02-24 18:09 一筐 阅读 (4638) 评论 (0) 编辑
摘要:一、需要用到的类java.awt.image.BufferedImage;javax.imageio.ImageIO;java.io.*;二、为什么要将BufferedImage转为byte数组在传输中,图片是不能直接传的,因此需要把图片变为字节数组,然后传输比较方便;只需要一般输出流的write方法即可;而字节数组变成BufferedImage能够还原图像;三、如何取得BufferedImageBufferedImage image = ImageIO.read(new File("1.gif"));四、BufferedImage ---->byte[]ImageI 阅读全文
posted @ 2011-12-30 11:27 一筐 阅读 (16931) 评论 (0) 编辑
摘要:本文摘自:http://blog.sina.com.cn/s/blog_4b5bc0110100g22w.html用JAVA获取文件,听似简单,但对于很多像我这样的新人来说,还是掌握颇浅,用起来感觉颇深,大常最经常用的,就是用JAVA的File类,如要取得c:/test.txt文件,就会这样用File file = new File("c:/test.txt");这样用有什么问题,相信大家都知道,就是路径硬编码,对于JAVA精神来说,应用应该一次成型,到处可用,并且从现实应用来讲,最终生成的应用也会部署到Windows外的操作系统中,对于linux来说,在应用中用了c:/这 阅读全文
posted @ 2011-12-26 15:37 一筐 阅读 (1678) 评论 (0) 编辑