package com.eighteengray.commonutillibrary;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.Base64;
import android.util.Xml;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
/**
* 数据格式转换工具类,包括InputStream、byte[]、String、
*/
public class DataConvertUtil
{
/**
* InputStream转为byte[]
* @param inputStream
* @return
*/
public static byte[] inputStream2Bytes(InputStream inputStream)
{
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
try
{
while ((len = inputStream.read(buffer)) != -1)
{
outStream.write(buffer, 0, len);
}
outStream.close();
inputStream.close();
} catch (IOException e)
{
e.printStackTrace();
}
return outStream.toByteArray();
}
/**
* InputStream转String
* @param inputStream
* @return
* @throws IOException
*/
public static String inputStream2String(InputStream inputStream) throws IOException
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buffer = new byte[2048];
int length = 0;
while ((length = inputStream.read(buffer)) != -1)
{
bos.write(buffer, 0, length);//写入输出流
}
inputStream.close();//读取完毕,关闭输入流
return new String(bos.toByteArray(), "UTF-8");
}
/**
* String转为InputStream
* @param str
* @return
*/
public static InputStream string2InputStream(String str)
{
InputStream inputStream = new ByteArrayInputStream(str.getBytes());
return inputStream;
}
/**
* byte[]转为16进制的字符串
* @param src
* @return
*/
public static String bytes2HexString(byte[] src)
{
StringBuilder stringBuilder = new StringBuilder("");
if (src == null || src.length <= 0)
{
return null;
}
for (int i = 0; i < src.length; i++)
{
int v = src[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2)
{
stringBuilder.append(0);
}
stringBuilder.append(hv);
}
return stringBuilder.toString();
}
/**
* 16进制字符串转为byte[]
* @param s
* @return
*/
public static byte[] hexString2Bytes(String s)
{
int len = s.length();
byte[] d = new byte[len / 2];
for (int i = 0; i < len; i += 2)
{
// 两位一组,表示一个字节,把这样表示的16进制字符串,还原成一个进制字节
d[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character
.digit(s.charAt(i + 1), 16));
}
return d;
}
//Bitmap相关
/**
* Bitmap转byte[]
* @param bm
* @return
*/
public static byte[] bitmap2Bytes(Bitmap bm)
{
ByteArrayOutputStream bas = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 100, bas);
return bas.toByteArray();
}
/**
* byte[]转Bitmap
* @param b
* @return
*/
public static Bitmap bytes2Bimap(byte[] b)
{
if (b.length != 0)
{
return BitmapFactory.decodeByteArray(b, 0, b.length);
} else
{
return null;
}
}
/**
* Drawable转Bitmap
* @param drawable
* @return
*/
public static Bitmap drawable2Bitmap(Drawable drawable)
{
BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
return bitmapDrawable.getBitmap();
}
/**
* Bitmap转Drawable
* @param bitmap
* @return
*/
public static Drawable bitmap2Drawable(Bitmap bitmap)
{
Drawable drawable = new BitmapDrawable(bitmap);
return drawable;
}
/**
* Bitmap转16进制字符串
* @param bitmap
* @return
*/
public static String bitmap2HexString(Bitmap bitmap)
{
String result = null;
ByteArrayOutputStream baos = null;
try
{
if (bitmap != null)
{
baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
baos.flush();
baos.close();
byte[] bitmapBytes = baos.toByteArray();
result = bytes2HexString(bitmapBytes);
}
} catch (IOException e)
{
e.printStackTrace();
} finally
{
try
{
if (baos != null)
{
baos.flush();
baos.close();
}
} catch (IOException e)
{
e.printStackTrace();
}
}
return result;
}
/**
* Bitmap转Base64 String
* @param bitmap
* @return
*/
public static String bitmap2Base64String(Bitmap bitmap)
{
String result = null;
ByteArrayOutputStream baos = null;
try
{
if (bitmap != null)
{
baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
baos.flush();
baos.close();
byte[] bitmapBytes = baos.toByteArray();
result = Base64.encodeToString(bitmapBytes, Base64.DEFAULT);
}
} catch (IOException e)
{
e.printStackTrace();
} finally
{
try
{
if (baos != null)
{
baos.flush();
baos.close();
}
} catch (IOException e)
{
e.printStackTrace();
}
}
return result;
}
/**
* Base64 String转Bitmap
* @param base64Data
* @return
*/
public static Bitmap base64String2Bitmap(String base64Data)
{
byte[] bytes = Base64.decode(base64Data, Base64.DEFAULT);
return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
}
/**
* Base64 String转byte[]
* @param base64String
* @return
*/
public static byte[] base642Bytes(String base64String)
{
byte[] bytes = Base64.decode(base64String, Base64.DEFAULT);
return bytes;
}
/**
* byte[]转Base64 String
* @param bytes
* @return
*/
public static String bytes2Base64(byte[] bytes)
{
return Base64.encodeToString(bytes, Base64.DEFAULT);
}
/**
* resouceId转Bitmap
* @param context
* @param resouceId
* @return
*/
public static Bitmap resouceId2Bitmap(Context context, int resouceId)
{
Bitmap resultBitmap = null;
Drawable drawable = context.getResources().getDrawable(resouceId);
resultBitmap = drawable2Bitmap(drawable);
return resultBitmap;
}
//xml相关
/**
* xml文件转特定对象实例
* @param xml
* @return
* @throws Exception
*/
public static List<Person> xml2Pojo(InputStream xml) throws Exception
{
List<Person> persons = null;
Person person = null;
XmlPullParser pullParser = Xml.newPullParser();
pullParser.setInput(xml, "UTF-8"); //为Pull解释器设置要解析的XML数据
int event = pullParser.getEventType();
while (event != XmlPullParser.END_DOCUMENT)
{
switch (event)
{
case XmlPullParser.START_DOCUMENT:
persons = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
if ("person".equals(pullParser.getName()))
{
person = new Person();
person.setId(pullParser.getAttributeValue(0));
}
if ("name".equals(pullParser.getName()))
{
String name = pullParser.nextText();
person.setName(name);
}
if ("age".equals(pullParser.getName()))
{
person.setAge(pullParser.nextText());
}
break;
case XmlPullParser.END_TAG:
if ("person".equals(pullParser.getName()))
{
persons.add(person);
person = null;
}
break;
}
event = pullParser.next();
}
return persons;
}
/**
* 特定对象转xml文件实例
* @param persons
* @param out
* @throws Exception
*/
public static void pojo2String(List<Person> persons, OutputStream out) throws Exception
{
XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(out, "UTF-8");
serializer.startDocument("UTF-8", true);
serializer.startTag(null, "persons");
for (Person person : persons)
{
serializer.startTag(null, "person");
serializer.attribute(null, "id", person.getId().toString());
serializer.startTag(null, "name");
serializer.text(person.getName().toString());
serializer.endTag(null, "name");
serializer.startTag(null, "age");
serializer.text(person.getAge().toString());
serializer.endTag(null, "age");
serializer.endTag(null, "person");
}
serializer.endTag(null, "persons");
serializer.endDocument();
out.flush();
out.close();
}
public static class Person
{
String id;
String name;
String age;
public String getId()
{
return id;
}
public void setId(String id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getAge()
{
return age;
}
public void setAge(String age)
{
this.age = age;
}
}
}