随笔分类 - JAVA
摘要:class sender extends Thread { PipedOutputStream out = new PipedOutputStream(); public PipedOutputStream getOut() { return out; } public void run() { ...
阅读全文
摘要:从写QQ的过程中来看,网络编程最重要的还是得设计好自己的协议,不要出现冗余数据也不要少了必要的数据。在数据的读写过程中一定要把网络中的数据流读干净,无论这些数据是否有用,不然就影响到后续的数据片段读取的开始结束及数据的类型读写错误。一定要做好Socket断开的处理,处理的过程中尽量不要调用Thread的中断、停止之类的函数,很危险。而是让这些进程自己break跳出循环,正常结束自己的生命周期
阅读全文
摘要:刚才实验了一下,用UDP协议还是不能传过大的文件,必须手动分片。利用TCP我传了一个4M的文件没什么问题,但换成4G的文件就要么卡死了要么报错,估计也是行不通的原因。 看了下TCP传文件的源码,其实在传文件之前都发送了几个非数据包,包括的信息有文件的大小,文件的名字等等。然后再发送数据包,可见将数据包和非数据包区分开来是很重要的。 换言之,如果用UDP协议来传文件的话,由于不知道UDP发送出去的数据包的到达顺序,因此无法判断谁是数据包谁不是数据包,显得很麻烦、再加上目的端的数据包顺序重组、丢失的包重发等重要特征使得利用UDP协议发送数据包显得更加麻烦。要利用UDP传文件可以借鉴FTP下载协议
阅读全文
摘要:Java里面某些类的部分成员函数带着deep前缀,与不带deep前缀的相比,这些函数会深层次深入到数组的维数去比较两个数组或容器对象。如:int[][] intArray2Temp1 = new int[][] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };int[][] intArray2Temp2 = new int[][] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };//比较首地址System.out.println(intArray2Temp1 == intArray2Temp2);//比较首地址System
阅读全文
摘要:没有实现Comparable接口的类数组如果要求实现Arrays.sort()排序功能,可以利用匿名内部类Comparator()来实现排序,例如:Arrays.sort(tt,new Comparator<test>() { @Override public int compare(test arg0, test arg1) { // TODO Auto-generated method stub if (arg0.index > arg1.index) { return 1; } else if (arg0.index < arg1.index...
阅读全文
摘要:编辑相关快捷键R5_,uesl#j0ITPUB个人空间c'Kd"X}U Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率。Eclipse中有如下一些和编辑相关的快捷键。So!t3~8r0lv(PP0 1. 【ALT+/】Ftn4a"W~`(b0 此快捷键为用户编辑的好帮手,能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁,当记不全类、方法和属性的名字时,多体验一下【ALT+/】快捷键带来的好处吧。W*` dI9J%q*P0L&CN{UL'`rR0 2. 【Ctr
阅读全文
摘要:Java里面的Timer和TimerTask类的用法:让一个线程任务周期性的执行Timer tr=new Timer(); TimerTask tt=new TimerTask(){ public void run() { for(;;) System.out.println("我是谁? "+System.currentTimeMillis()); } }; tr.schedule(tt, 5000, 1000);
阅读全文
摘要:守护线程其实就是后台线程,其在非守护线程即前台线程的生命周期结束之后其生命周期也结束,虚拟机保证前台线程的能够在运行完毕后结束,而不保证守护线程能够运行完毕,其生命周期是由其服务的非守护线程的生命周期决定的。 JAVA用setdaemon()来设定一个线程是否为守护线程
阅读全文
摘要:ArrayList会比Vector快,他是非同步的,如果设计涉及到多线程,还是用Vector比较好一些 Array可以存放Object和基本数据类型,但创建时必须指定数组的大小,并不能再改变没有实现Comparable接口的类数组如果要求实现Arrays.sort()排序功能,可以利用匿名内部类Comparator()来实现排序,例如:Arrays.sort(tt,new Comparator<test>() { @Override public int compare(test arg0, test arg1) { // TODO Auto-generated method st
阅读全文
摘要:public static int[] a={1,2,3,4,5,6,7,8,9,10}; public static void main(String[] args) { // TODO Auto-generated method stub for(int i=0;i<a.length-1;i++) { //每次选一个最小的数当最小的数 int small=i; ...
阅读全文
摘要:final修饰变量、类和方法的效果不一样。finally用于在捕获异常的过程中,无论是否捕获到异常均执行finally里面的语句。finalize()函数是每个类都可以重写的函数,用于在系统收回内存空间之前执行里面的语句。但由于java的自动回收内存空间的机制,我们必须显示的调用System.gc()提醒系统回收内存空间才能看到finalize()里面的语句的执行结果。
阅读全文
摘要:Java容器类主要有vector和Collectionpublic static void main(String[] args) { // TODO Auto-generated method stub System.out.printf("Hello World");Vector vec=new Vector();String str1=new String("welcome");String str2=new String("to");String str3=new String("China");vec.a
阅读全文
摘要:申明数组的时候多维数组C必须给出低维,而JAVA必须给出高维。JAVA声明数组必须在类型后面给出[ ]而C必须在变量后面给出[ ]。JAVA环境配置ClassPathl .:加上lib目录JAVA接口里面的变量都被编译器自动加上public final static修饰,成为常量。其成员函数自动有public abstract属性Eclipse快捷键:Ctr+shift+F整理格式Alt+?自动补齐Ctr+回车 插入一行Alt+上下键 上下移动当前行一行
阅读全文
摘要:在“系统变量”中,设置3项属性,JAVA_HOME,PATH,CLASSPATH(大小写无所谓),若已存在则点击“编辑”,不存在则点击“新建”; JAVA_HOME指明JDK安装路径,就是刚才安装时所选择的路径D:/java/jdk1.5.0_08,此路径下包括lib,bin,jre等文件夹(此变量最好设置,因为以后运行tomcat,eclipse等都需要依*此变量); Path使得系统可以在任何路径下识别java命令,设为:%JAVA_HOME%/bin;%JAVA_HOME%/jre/bin CLASSPATH为java加载类(class or lib)路径,只有类在classpath..
阅读全文
浙公网安备 33010602011771号