直接上代码:
/**
* splitAry方法<br>* @param ary 要分割的数组
* @param subSize 分割的块大小
* @return
*
*/
public static Object[] splitAry(byte[] ary, int subSize) {
int count = ary.length % subSize == 0 ? ary.length / subSize: ary.length / subSize + 1;
List<List<Byte>> subAryList = new ArrayList<List<Byte>>();
for (int i = 0; i < count; i++) {
int index = i * subSize;
List<Byte> list = new ArrayList<Byte>();
int j = 0;
while (j < subSize && index < ary.length) {
list.add(ary[index++]);
j++;
}
subAryList.add(list);
}
Object[] subAry = new Object[subAryList.size()];
for(int i = 0; i < subAryList.size(); i++){
List<Byte> subList = subAryList.get(i);
byte[] subAryItem = new byte[subList.size()];
for(int j = 0; j < subList.size(); j++){
subAryItem[j] = subList.get(j);
}
subAry[i] = subAryItem;
}
return subAry;
}
/**
* 从网络Url中下载文件
* @param urlStr
* @param fileName
* @param savePath
* @throws IOException
*/
public static void downLoadFromUrl(String urlStr,String fileName,String savePath) throws IOException{
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
//设置超时间为3秒
conn.setConnectTimeout(3*1000);
//防止屏蔽程序抓取而返回403错误
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
//得到输入流
InputStream inputStream = conn.getInputStream();
//获取自己数组
byte[] getData = readInputStream(inputStream);
//文件保存位置
File saveDir = new File(savePath);
if(!saveDir.exists()){
saveDir.mkdir();
}
File file = new File(saveDir+File.separator+fileName);
FileOutputStream fos = new FileOutputStream(file);
fos.write(getData);
if(fos!=null){
fos.close();
}
if(inputStream!=null){
inputStream.close();
}
if(fileName.indexOf("amr") > 0){
try {
FileSizeUtil.amrToMp3(saveDir+File.separator+fileName);
} catch (EncoderException e) {
}
}
System.out.println("info:"+url+" download success");
}
/**
* 从输入流中获取字节数组
* @param inputStream
* @return
* @throws IOException
*/
public static byte[] readInputStream(InputStream inputStream) throws IOException {
byte[] buffer = new byte[1024];
int len = 0;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
while((len = inputStream.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
bos.close();
return bos.toByteArray();
}
测试:
public static void main(String[] args) throws EncoderException {
//通过图片url生成二进制数组
byte [] data = FileSizeUtil.getImageBinaryByUrl("http://localhost:8080/DSTAXI/upload/servicelicense/201511061406553284.png");
System.out.println(data.length);
System.out.println(FileSizeUtil.byte2hex(data));
Object[] objdata = FileSizeUtil.splitAry(data, 512);
int count = 0;
for(Object obj : objdata){
byte [] bytedata = (byte [])obj;
System.out.println(bytedata.length);
System.out.println(FileSizeUtil.byte2hex(bytedata));
count = count + 1;
}
System.out.println(count);
}