3.51.写一个简单的socket实现聊天功能程序的例子(不要求界面,只实现数据传输)一个主服务端,一个客户端
参考答案:
public class ServerDemo{
public static void main(String[] args) throws IOExcetpion{
ServerDemo server = new ServerDemo();
server.start();
}
public void start() throws IOException{
ServerSocket ss = new ServerSocket(8088);
System.out.println("等待客户的连接...");
Socket s = ss.accept();
System.out.println("客户连接成功:" + s.getInetAddress());
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
Reader r = new Reader(out);
r.start();
Writer w = new Writer(in);
w.start();
}
}
public class ClientDemo{
public static void main(String[] args) throws IOException{
ClientDemo client = new ClientDemo();
client.open();
}
public void open() throws IOException{
Socket s = new Socket("localhost",8088);
InputStream in = s.getInputStream();
OutputStream out = s.getInputStream();
new Reader(out).start();
new Writer(in).start();
}
}
class Reader extends Thread{
OutputStream out;
public reader(OutputStream out){
this.out = out;
setDaemon(true);
}
public void run(){
Scanner s = new Scanner(System.in);
try{
while(true){
String str = s.nextLine();
out.write(str.getBytes());
out.flush();
}
} catch(IOException e){
e.printStackTrace();
}
}
}
class Writer extends Thread{
InputStream in;
public Writer(InputStream in){
this.in = in;
}
public void run(){
try{
int b;
while((b = in.read()) != -1){
System.out.write(b);
}
} catch(Exception e){
e.printStackTrace();
}
}
}
3.52.Java Socket编程,从服务器读几个字符,再写入本地控制台
参考答案:
public class ServerDemo{
public static void main(String[] args) throws IOException{
ServerSocket ss = new ServerSocket(8088);
Socket s = ss.accept();
OutputStream out = s.getOutputStream();
out.write("从服务器读取几个字符!\n".getBytes());
out.flush();
out.close();
}
}
public class ClientDemo{
public static void main(String[] args) throws IOException{
Socket s = new Socket("localhost",8088);
InputStream in = s.getInputStream();
int b;
while((b = in.read()) != -1){
System.out.write(b);
}
}
}
3.53.什么是Java序列化,如何实现Java序列化?
参考答案:
序列化就是一种用来处理对象流的机制,所谓对象刘也就是将对象的内容进行流化.可以对硫化后的对象进行读写操作,也可将硫化后的对象传输于网络之间.序列化是为了解决在对对象流进行读写操作时所引发的问题;
序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如FileOutputStream)来构造一个ObjectOutPutStream(对象流)对象,接着,使用ObjectOutPutStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流.
3.54.Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出它们分别是哪些类
参考答案:
Java中有字节流,字符流.
字节输入流的父类为InputStream,字节输出流的父类为OutPutStream;字符输入流的父类为Reader,字符输出流的父类为Writer.
3.55.字节流和字符流有什么区别?
参考答案:
字节流与字符流主要的区别是它们的处理方式.字节流是最基本的,所有的InputStream和OutputStream的子类用于处理二进制数据,它是按字节来处理的.而字符流是以字符为单位读写数据的.
3.56.文件和目录(IO)操作:
1)如何列出某个目录下的所有文件?
2)如何列出某个目录下的所有子目录?
3)如何判断一个文件或目录是否存在?
参考答案:
1)列出D盘demo目录下的所有文件的示例代码如下所示:
File file = new File("d:/demo");
File[] files = file.listFiles();
for(int i = 0; i < files.length; i++){
if(files[i].isFile()){
System.out.println(files[i]);
}
}
2)列出D盘demo目录下的所有子目录的示例代码如下:
File file = new File("d:/demo");
File[] files = file.listFiles();
for(int i = 0; i < files.length; i++){
if(files[i].isFile()){
System.out.println(files[i]);
}
}
3)创建File对象,调用其exists()方法即可判断文件和目录是否存在,实例代码如下所示:
System.out.println(new File("d:/t.txt").exists());
3.57.String s = new String(“xyz”);创建了几个String Object?
参考答案:
如果在执行这行代码之前没有创建过”xyz”对象(也就是说这行代码之前没有String str = “xyz” 或 String str2 = new String(“xyz”);类似的代码),则执行这行代码会创建两个String Object;如果在执行这行代码之前创建过”xyz”对象,则执行这行代码会创建一个String Object.
3.58.是否可以继承String类?
参考答案:
String类是final的,所以不能能够被继承.
3.59.说出”==”和equals()方法在字符串变量操作中的不同
参考答案:
”==”比较的是引用,相当于比较两个字符串是否是同一个对象.
String类的equals()比较的是字符串的内容.
3.60.数组有没有length()这个方法?String有没有length()这个方法?
参考答案:
数组没有length()方法,有length属性;String有length()方法.