Java网络编程1
2009-11-29 21:11
330 查看
InetAddress类代表IP地址,有两个子类,Inet4Address,Inet6Address代表IPV4和IPv6,没有构造方法,但是提供个了两个静态方法来获取InetAddress实例:getByName(String host):根据逐句获取对应的InetAddress对象;getByAddress(byte[]addr):根据原始IP地址来获取对应的InetAddress对象.
String getCanonicalHostName():获取此IP地址的全限定域名
String getHostAddress():返回该InetAddress实例对应的IP地址字符串
String getHostName():获取此IP地址的主机名
Boolean isReachable():测试是否可以到达该地址
URLDecoder 和URLEncoder用于普通字符串和application/x-www-form-urlencoded MIME字符串之间的相互转换。
URLDecoder的decode(String s,String enc)静态方法,他可以将看上去乱码的特殊字符转换成普通字符串
URLEncoder的encode(String s,String enc)静态方法,他可以将普通字符串转换成application/x-www-form-urlencoded MIME字符串
URL和URLConnection
URL url=new URL("http://doc.mysql.cn/download/chm/refman-5.1.mysql.tar.gz");
URLConnection conn=url.openConnection();
一个下载资源的线程程序
多线程下载一个文件
String getCanonicalHostName():获取此IP地址的全限定域名
String getHostAddress():返回该InetAddress实例对应的IP地址字符串
String getHostName():获取此IP地址的主机名
Boolean isReachable():测试是否可以到达该地址
URLDecoder 和URLEncoder用于普通字符串和application/x-www-form-urlencoded MIME字符串之间的相互转换。
URLDecoder的decode(String s,String enc)静态方法,他可以将看上去乱码的特殊字符转换成普通字符串
URLEncoder的encode(String s,String enc)静态方法,他可以将普通字符串转换成application/x-www-form-urlencoded MIME字符串
URL和URLConnection
URL url=new URL("http://doc.mysql.cn/download/chm/refman-5.1.mysql.tar.gz");
URLConnection conn=url.openConnection();
一个下载资源的线程程序
import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; public class DownThread extends Thread { // 定义字节数组的长度 private final static int BUFFER_LEN = 32; // 定义下载的起点 private long start; // 定义下载的结束点 private long end; // 定义下载资源对应的输入流 private InputStream is; // 将下载的字节输出 private RandomAccessFile raf; public DownThread(long start, long end, InputStream is, RandomAccessFile raf) { super(); //输出该线程负责下载的字节位置 System.out.println(start+"---->"+end); this.start = start; this.end = end; this.is = is; this.raf = raf; } public void run(){ try { is.skip(start); raf.seek(start); //定义读取输入流内容的缓存数组 byte []buff=new byte[BUFFER_LEN]; //本线程负责下载的资源大小 long contentLen=end-start; //定义最多需要读取几次就可以完成资源下载 long times=contentLen/BUFFER_LEN+4; //实际读取的字节数 int hasRead; for(int i=0;i<times;i++){ hasRead=is.read(buff); if(hasRead<0){ break; } raf.write(buff,0,hasRead); } } catch (IOException e) { e.printStackTrace(); }finally{ try { if(is!=null){ is.close(); } if(raf!=null){ raf.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
多线程下载一个文件
import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; public class MutilDown { /** * @param args */ public static void main(String[] args) { final int DOWN_THREAD_NUM = 4; final String OUT_FILE_NAME = "mysql.tar.gz"; InputStream [] isArr=new InputStream[DOWN_THREAD_NUM]; RandomAccessFile []outArr=new RandomAccessFile[DOWN_THREAD_NUM]; try { //创建一个URL对象 URL url=new URL("http://doc.mysql.cn/download/chm/refman-5.1.mysql.tar.gz"); //以此打开一个InputStream isArr[0]=url.openStream(); long fileLen=getFileLength(url); //以输出文件名创建一个RandomAccessFile输出流 outArr[0]=new RandomAccessFile(OUT_FILE_NAME,"rw"); //创建一个与下载文件同样大小的空文件 for(int i=0;i<fileLen;i++){ outArr[0].write(0); } //每个线程应该下载的字节数 long numPerThread=fileLen/DOWN_THREAD_NUM; //整个下载资源整除后剩余的字节数 long left=fileLen%DOWN_THREAD_NUM; for(int i=0;i<DOWN_THREAD_NUM;i++){ //每个线程打开一个线程,一个RandomAccessFile对象 //让每个线程分别负责下载资源不同的部分 if(i!=0){ //以URL打开多个输入流 isArr[i]=url.openStream(); //以指定输出文件创建多个RandomAccessFile对象 outArr[i]=new RandomAccessFile(OUT_FILE_NAME,"rw"); } //分别启动线程下载 if(i==DOWN_THREAD_NUM-1){ //负责下载剩余的字节 new DownThread(i*numPerThread,(i+1)*numPerThread+left,isArr[i],outArr[i]).start(); }else{ //每个线程下载一定的字节数 new DownThread(i*numPerThread,(i+1)*numPerThread,isArr[i],outArr[i]).start(); } } } catch (MalformedURLException e) { e.printStackTrace(); } catch(IOException ioe){ ioe.printStackTrace(); } } private static long getFileLength(URL url) throws IOException { long length=0; //打开该URL对应的URLConnection URLConnection con=url.openConnection(); //获取连接URL资源长度 long size =con.getContentLength(); length=size; return length; } }
相关文章推荐
- 奋斗黑马程序员----Java之网络编程(一)
- Java的网络编程-Socket编程
- java网络编程
- java网络编程、多线程
- java中网络socket编程简单例子,用于读写字符
- Java网络编程资料
- Java_网络编程_使用TCP协议发送及接收数据
- JAVA语言的网络功能与编程
- Java网络编程基础 InetAddress类的使用
- Java_常瑞鹏 java 深入理解 网络编程
- Java网络编程从入门到精通(1):Internet地址概述 推荐
- 第三次java作业:网络编程
- Linux+javaEE学习之文件的压缩+解压缩+java网络编程
- java 网络编程要点(二)
- Java网络编程 基本网络概念
- 二、java网络io编程(BIO、NIO)
- Java网络编程一
- Java 网络编程
- 基于Socket的java网络编程
- java 网络编程