作为一枚Android开发人员,有些公用的类,汇总一下公用类,对我们平时的开发会有很大的帮助。这样我们,才能抽出更多的时间,该研究技术的研究技术,有妹子的抱妹子,还没有妹子的,自己想办法。
现在开始整理汇总一些,分享给大家。
今天是分享一个转换的类ConvertUtils.java 目录:
bytes2HexString, hexString2Bytes : byteArr与hexString互转
chars2Bytes, bytes2Chars : charArr与byteArr互转
byte2Size, size2Byte : 字节数与unit为单位的size互转
byte2FitSize : 字节数转合适大小
bytes2Bits, bits2Bytes : bytes与bits互转
input2OutputStream, output2InputStream : inputStream与outputStream互转
inputStream2Bytes, bytes2InputStream : inputStream与byteArr互转
outputStream2Bytes, bytes2OutputStream : outputStream与byteArr互转
inputStream2String, string2InputStream : inputStream与string按编码互转
outputStream2String, string2OutputStream : outputStream与string按编码互转
bitmap2Bytes, bytes2Bitmap : bitmap与byteArr互转
drawable2Bitmap, bitmap2Drawable : drawable与bitmap互转
drawable2Bytes, bytes2Drawable : drawable与byteArr互转
view2Bitmap : view转Bitmap
dp2px, px2dp : dp与px互转
sp2px, px2sp : sp与px互转
import android.annotation.SuppressLint;import android.content.res.Resources;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.view.View;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.UnsupportedEncodingException;/**
* <pre>
* author: Blankj
* blog : http://blankj.com
* time : 2016/8/13
* desc : 转换相关工具类
* </pre>
*/public class ConvertUtils { private ConvertUtils() { throw new UnsupportedOperationException("u can't instantiate me...");
} private static final char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; /**
* byteArr转hexString
* <p>例如:</p>
* bytes2HexString(new byte[] { 0, (byte) 0xa8 }) returns 00A8
*
* @param bytes 字节数组
* @return 16进制大写字符串
*/
public static String bytes2HexString(byte[] bytes) { if (bytes == null) return null; int len = bytes.length; if (len <= 0) return null; char[] ret = new char[len << 1]; for (int i = 0, j = 0; i < len; i++) {
ret[j++] = hexDigits[bytes[i] >>> 4 & 0x0f];
ret[j++] = hexDigits[bytes[i] & 0x0f];
} return new String(ret);
} /**
* hexString转byteArr
* <p>例如:</p>
* hexString2Bytes("00A8") returns { 0, (byte) 0xA8 }
*
* @param hexString 十六进制字符串
* @return 字节数组
*/
public static byte[] hexString2Bytes(String hexString) { if (StringUtils.isSpace(hexString)) return null; int len = hexString.length(); if (len % 2 != 0) {
hexString = "0" + hexString;
len = len + 1;
} char[] hexBytes = hexString.toUpperCase().toCharArray(); byte[] ret = new byte[len >> 1]; for (int i = 0; i < len; i += 2) {
ret[i >> 1] = (byte) (hex2Dec(hexBytes[i]) << 4 | hex2Dec(hexBytes[i + 1]));
} return ret;
} /**
* hexChar转int
*
* @param hexChar hex单个字节
* @return 0..15
*/
private static int hex2Dec(char hexChar) { if (hexChar >= '0' && hexChar <= '9') { return hexChar - '0';
} else if (hexChar >= 'A' && hexChar <= 'F') { return hexChar - 'A' + 10;
} else { throw new IllegalArgumentException();
}
} /**
* charArr转byteArr
*
* @param chars 字符数组
* @return 字节数组
*/
public static byte[] chars2Bytes(char[] chars) { if (chars == null || chars.length <= 0) return null; int len = chars.length; byte[] bytes = new byte[len]; for (int i = 0; i < len; i++) {
bytes[i] = (byte) (chars[i]);
} return bytes;
} /**
* byteArr转charArr
*
* @param bytes 字节数组
* @return 字符数组
*/
public static char[] bytes2Chars(byte[] bytes) { if (bytes == null) return null; int len = bytes.length; if (len <= 0) return null; char[] chars = new char[len]; for (int i = 0; i < len; i++) {
chars[i] = (char) (bytes[i] & 0xff);
} return chars;
} /**
* 以unit为单位的内存大小转字节数
*
* @param memorySize 大小
* @param unit 单位类型
* <ul>
* <li>{@link ConstUtils.MemoryUnit#BYTE}: 字节</li>
* <li>{@link ConstUtils.MemoryUnit#KB} : 千字节</li>
* <li>{@link ConstUtils.MemoryUnit#MB} : 兆</li>
* <li>{@link ConstUtils.MemoryUnit#GB} : GB</li>
* </ul>
* @return 字节数
*/
public static long memorySize2Byte(long memorySize, ConstUtils.MemoryUnit unit) { if (memorySize < 0) return -1; switch (unit) { default: case BYTE: return memorySize; case KB: return memorySize * ConstUtils.KB; case MB: return memorySize * ConstUtils.MB; case GB: return memorySize * ConstUtils.GB;
}
} /**
* 字节数转以unit为单位的内存大小
*
* @param byteNum 字节数
* @param unit 单位类型
* <ul>
* <li>{@link ConstUtils.MemoryUnit#BYTE}: 字节</li>
* <li>{@link ConstUtils.MemoryUnit#KB} : 千字节</li>
* <li>{@link ConstUtils.MemoryUnit#MB} : 兆</li>
* <li>{@link ConstUtils.MemoryUnit#GB} : GB</li>
* </ul>
* @return 以unit为单位的size
*/
public static double byte2MemorySize(long byteNum, ConstUtils.MemoryUnit unit) { if (byteNum < 0) return -1; switch (unit) { default: case BYTE: return (double) byteNum; case KB: return (double) byteNum / ConstUtils.KB; case MB: return (double) byteNum / ConstUtils.MB; case GB: return (double) byteNum / ConstUtils.GB;
}
} /**
* 字节数转合适内存大小
* <p>保留3位小数</p>
*
* @param byteNum 字节数
* @return 合适内存大小
*/
@SuppressLint("DefaultLocale") public static String byte2FitMemorySize(long byteNum) { if (byteNum < 0) { return "shouldn't be less than zero!";
} else if (byteNum < ConstUtils.KB) { return String.format("%.3fB", byteNum + 0.0005);
} else if (byteNum < ConstUtils.MB) { return String.format("%.3fKB", byteNum / ConstUtils.KB + 0.0005);
} else if (byteNum < ConstUtils.GB) { return String.format("%.3fMB", byteNum / ConstUtils.MB + 0.0005);
} else { return String.format("%.3fGB", byteNum / ConstUtils.GB + 0.0005);
}
} /**
* 以unit为单位的时间长度转毫秒时间戳
*
* @param timeSpan 毫秒时间戳
* @param unit 单位类型
* <ul>
* <li>{@link ConstUtils.TimeUnit#MSEC}: 毫秒</li>
* <li>{@link ConstUtils.TimeUnit#SEC }: 秒</li>
* <li>{@link ConstUtils.TimeUnit#MIN }: 分</li>
* <li>{@link ConstUtils.TimeUnit#HOUR}: 小时</li>
* <li>{@link ConstUtils.TimeUnit#DAY }: 天</li>
* </ul>
* @return 毫秒时间戳
*/
}
公众号编辑代码块太折腾,这个类源码过多,只贴了一部分
https://mp.weixin.qq.com/s/UU_1Kwn9-paP6Tp25GEaVA