2017九月15
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 生成验证码,将验证码绘制成一张图片返回浏览器
*
* @author FreeDroid
*
*/
public class CheckcodeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void service(HttpServletRequest request,
HttpServletResponse response) throws
ServletException, IOException {
/*
* step1.绘图
*/
Random r = new Random();
//从getString()方法取出A-Z,0-9的指定长度随机字符串
String number = getString(5);
//先创建一个画布(内存映像对象)
BufferedImage image = new BufferedImage(80, 30, BufferedImage.TYPE_INT_BGR);
//获得画笔
Graphics g = image.getGraphics();
//给画笔设置颜色
g.setColor(new Color(255, 255, 255));
//给画布设置背景颜色
g.fillRect(0, 0, 80, 30);
//设置字体
g.setFont(new Font(null, Font.BOLD|Font.ITALIC, 20));
//给每个字符设置随机颜色,并画到画布上
for (int i = 0; i < number.length(); i++) {
//给画笔设置颜色
g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
//在画布上画字符
g.drawString(String.valueOf(number.charAt(i)), i*15, 25);
}
//加一些干扰线
for (int i = 0; i < 8; i++) {
//给画笔设置颜色
g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
//在画布范围内画线
g.drawLine(r.nextInt(80), r.nextInt(30), r.nextInt(80), r.nextInt(30));
}
/*
* step2.将图片压缩,然后输出
*/
//设置响应内容类型为JPEG格式的图片
response.setContentType("image/jpeg");
//获得字节输出流(图片是二进制数据)
OutputStream os = response.getOutputStream();
//将原始图片(image)按照指定的算法压缩(jpeg)
//然后将压缩之后得到的字节写入response对象。
javax.imageio.ImageIO.write(image, "jpeg", os);
os.close();
}
/**
* 随机生成指定长度的大写字母和数字组合
* @param length
* @return
*/
private String getString(int length) {
StringBuilder str = new StringBuilder();
Random r = new Random();
//取出大写字母
for (int i = 0; i < 26; i++) {
str.append((char) ('A' + i));
}
//取出数字
for (int i = 0; i < 10; i++) {
str.append((char) ('0' + i));
}
//从字符串str随机取length个字符放进str2组成新的字符串
StringBuilder str2 = new StringBuilder();
for (int i = 0; i < length; i++) {
str2.append(str.charAt(r.nextInt(str.length())));
}
return str2.toString();
}
}
2017八月11
/**
* UTF中文字符编码和解码
* 中文字符占3个字节,前缀分别是:1110XXXX 10XXXXXX 10XXXXXX
*
* @author FreeDroid
*
*/
public class Utf8codeANDdecode {
public static void main(String[] args) {
int ch = '我';
byte[] bytes = codeUTF8(ch);
char ch2 = decodeUTF8(bytes);
System.out.println(ch2);
}
/**
* 解码
* @param bytes
* @return
*/
public static char decodeUTF8(byte[] bytes) {
int ch = (bytes[0]<<12&0xffff)|(bytes[1]<<6&0x3fff)|(bytes[2]&0x3f);
return (char) ch;
}
/**
* 编码
* @param ch
* @return
*/
public static byte[] codeUTF8(int ch) {
int b3 = ch & 0x3f | 0x80;
int b2 = ch >>> 6 & 0x3f | 0x80;
int b1 = ch >>> 12 & 0xf | 0xe0;
return new byte[] { (byte) b1, (byte) b2, (byte) b3 };
}
}
2017七月30
public void newFile(File file){
try {
if (file.createNewFile()) {
System.out.println("文件创建成功!");
} else {
String cName = changeName(file);
File files = new File("." + File.separator + cName);
newFile(files);
}
} catch (IOException e) {
e.printStackTrace();
}
}
public String changeName(File file) {
String name = file.getName();
int index = name.lastIndexOf('.');
int index2 = name.lastIndexOf("_副本");
if (index2 < 0) {
return name.substring(0, index) + "_副本1" + name.substring(index);
} else {
String num = name.substring(index2+3, index);
int i = Integer.valueOf(num)+1;
return name.substring(0, index2) + "_副本" + i + name.substring(index);
}
}
2014十二月7
家里花花的车载CD坏了,进不了碟,拆出来修的话感觉意义不大。那就趁机会小升级一下。http://weibo.com/freedroid
首先考虑过车载导航,android系统的太贵(大部分都要3000左右)。渣系统的实用性不强(还不如手机导航)。倒车影像对我来说用处不大,家用车开了那么久,车长什么的都把握的好,误差也就5cm左右。而且这个位置夏天很热,太复杂的设备不能保证耐用性。加上我开车用导航听声音就行,基本上不用看地图,开着手机一边听一边看路萌萌哒,一点问题都没有。既然如此,那就小升级一下,加个AUX和USB功能的车载CD足够用了,而且不需要复杂布线,安装简单。http://weibo.com/freedroid
首先准备工作,13款花冠车载CD,X宝等渠道都可以获得。规格10的T字形外六角套筒(五金店有卖,10块钱之内搞定),规格8的外六角扳手(同样五金店有卖,忘记拍进去了),十字螺丝刀一把。卡片若干,最好有张布http://weibo.com/freedroid
先把空调出风口拔出来,出风口往下摆(如图),然后使劲往外扯,使劲扯就行,不会坏的http://weibo.com/freedroid
车载CD由四个螺丝固定,如下两张图,中间那个不是。这里用10的套筒把螺丝卸下来。注意!!!一定要注意!这里我使用卡片去垫,一是保护下方的中控面板不被刮花,二是螺丝松了掉在卡片上不会掉进中控面板里(掉进去就拿不出来了)这四颗螺丝小心拧出来,保证不要掉进中控里就行了。装的时候也一样要小心。http://weibo.com/freedroid
卸下四颗螺丝之后把CD往外拔,用规格8的扳手把两边各四颗螺丝也卸下来,很简单,我就不上图了(其实是忘记拍照)。把CD想办法拔出来,这里有点技巧,眼见功夫,基本上都搞得定。换上新的CD,插上电源测试一下。没问题就装好CD机的螺丝,再测试一下。http://weibo.com/freedroid
最终没问题了就把空调出风口装上,完美无损安装完毕,完结撒花。PS:我手工不好,空调出风口上方有很大的缝http://weibo.com/freedroid
2014十月23
刚才在工商银行等号办业务,人巨多。突然一男子冲进来大喊:谁的路虎,停的地方挡住路了?众人期待。。。哥淡定的起身,带起黑色墨镜,缓缓的出了门,众人那个羡慕啊。依稀听到后面的声音:草,年轻有为啊;我噻,看不出来啊。。哥出门左拐,打开电动,扬长而去。。
2011九月19
写在前面:请先备份联系人,短信等重要数据,建议使用豌豆荚。此rom非官方rom,随时有可能有不可预测的情况,如果你什么都不懂的,建议不要乱来。
- 保证你的手机是2.2,建议是刷这个底层包:点击我;刷MIUI建议用该底包:点击我。底层包刷机教程:点击我
- 下载CM7的升级包。目前有三个:链接一,链接二,链接三。MIUI升级包下载地址:点击我。 不解压放在SD卡里(建议放到根目录下)
- 手机必须是获取root权限。获取root权限工具:点击我下载。手机端先设置一下:设置–>应用程序–>开发–>降“USB调试”打钩。然后将手机连接电脑,点击刚下载的SuperOneClick
- 接下来是等待SuperOneClick工具对手机进行root操作。出现下图表示获取root权限成功
- 重启手机,安装bootmenu程序:点击下载。打开程序,允许程序获取root权限。点击安装Bootmenu
- 重启后进入下图界面,通过音量键选择第三项“Recovery”,按电源键确认(以下操作都是按电源键确认)
- 下面就是第三方Recovery的界面(有可能是显示红色的字体),选择第五项“Install zip from sdcard”
- 选择第一项“choose zip from sdcard”
- 在这找到你下载的CM7升级包,放在根目录下的升级包一般在最下面,建议按音量上键来寻找。下图是我将要安装的升级包
- 安装完毕一路”Go Back”到进入Recovery的界面,执行第三和第四项“双wipe”(此操作也可以在手机关机状态下按”X”+电源键进入官方recovery进行双wipe)。完毕后点击第一项重启设备。
- 接下来就是等待进入系统了,第一次进入系统大概需要2-5分钟。
如果你看完下面的知识,你基本上可以对其它android手机刷第三方rom(本人采用非专业术语来说明)
root:linux管理员权限(android系统基于linux编写),获取root权限可以对手机系统动刀动枪,修改系统文件和添加文件等等。
recovery:android系统的恢复工具,通过此工具的wipe功能来恢复出厂模式。官方recovery提供update zip功能对手机进行批量程序的安装,例如谷歌套件(GMS)。第三方recovery可以安装开发者自己做的升级包,目前第三方rom基本上是通过第三方recovery来安装,安装方法大同小异。关键的地方时不同手机进入recovery的方式不一样,刷写第三方recovery的方法也不一样。具体步骤到相应手机的论坛板块寻找教程。
问题:刷完无法进入系统怎么办?
答: 请再双wipe一次,再不行就重新刷一遍(zip)升级包,再不行就重刷一次SBF底包。
问题:手机有时候会死机不稳定如何解决?
答:目前就我的使用情况来看,死机的情况比较少,有部分程序不兼容导致死机等现象。请谨慎安装需要root权限的程序。
问题:为什么无法720p拍摄?
答:由于部分驱动未完善,手机无法对部分视频硬解码。
如果你在刷机过程中遇到不懂的地方可以通过我的新浪微博找我:FreeDroid
如果你在使用中遇到任何问题,请不要找我。