Java 面试之 IO 流及Socket

Java 面试之 IO 流及SocketJava 面试之 IO 流及Socket

大家好,又见面了,我是你们的朋友全栈君。

1、什么是java 序列化,如何实现java 序列化?【基础】

答:序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题;序列化的实现:将需要被序列化的类实现Serializable 接口,该接口没有需实现的方法,implements Serializable 只是为了标注该对象是可被序列化的,然后使用一个输出流(如FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream 对象的writeObject(Object obj)方法就可以将参数为obj 的对象写出(即保存其状态),要恢复的话则用输入流。

2、java 中有几种类型的流?JDK 为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?【基础】

答:字节流,字符流。字节流继承于InputStream、OutputStream,字符流继承于Reader、Writer。在java.io 包中还有许多其他的流,主要是为了提高性能和使用方便。

3、文件和目录(IO)操作:

1)如何列出某个目录下的所有文件?
2)如何列出某个目录下的所有子目录?
3)如何判断一个文件或目录是否存在?
4)如何读写文件?【基础】
答:1)示例代码如下:

File file = new File("e:\\总结");
File[] files = file.listFiles();
for(int i=0; i<files.length; i++){
if(files[i].isFile());
System.out.println(files[i]
}

2)示例代码如下:

File file = new File("e:\\总结");
File[] files = file.listFiles();
for(int i=0; i<files.length; i++){
if(files[i].isDirectory()) System.out.println(files[i]);
}

3)创建File 对象,调用其exsit()方法即可返回是否存在,如:
System.out.println(new File(“d:\t.txt”).exists());
4)示例代码如下:

//读文件:
FileInputStream fin = new FileInputStream("e:\\tt.txt");
byte[] bs = new byte[100];
while(true){
int len = fin.read(bs);
if(len <= 0) break;
System.out.print(new String(bs,0,len));
}
fin.close();
//写文件:
FileWriter fw = new FileWriter("e:\\test.txt");
fw.write("hello world!" + System.getProperty("line.separator"));
fw.write("你好!北京!");
fw.close();

4、写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数。【基础】

答:代码如下:

public int countWords(String file, String find) throws Exception
{
int count = 0;
Reader in = new FileReader(file);
int c;
while ((c = in.read()) != -1) {
while (c == find.charAt(0)) {
for (int i = 1; i < find.length(); i++) {
c = in.read();
if (c != find.charAt(i)) break;
if (i == find.length() - 1) count++;
}
}
}
return count;
}

5、Java 的通信编程,编程题(或问答),用JAVA SOCKET 编程,读服务器几个字符,再写入本地显示?【基础】

答:Server 端程序:

    package test;
    import java.net.*;
    import java.io.*;
    public class Server{ 
   
    private ServerSocket ss;
    private Socket socket;
    private BufferedReader in;
    private PrintWriter out;
    public Server(){ 
   
    try { 
   
    ss=new ServerSocket(10000);
    while(true){ 
   
    socket = ss.accept();
    String RemoteIP =
    socket.getInetAddress().getHostAddress();
    String RemotePort = ":"+socket.getLocalPort();
    System.out.println("A client come in!IP:"
    + RemoteIP+RemotePort);
    in = new BufferedReader(new
    InputStreamReader(socket.getInputStream()));
    String line = in.readLine();
    System.out.println("Cleint send is :" + line);
    out =
    new PrintWriter(socket.getOutputStream(),true);
    out.println("Your Message Received!");
    out.close();
    in.close();
    socket.close();
    }
    }catch (IOException e){ 
   
    out.println("wrong");
    }
    }
    public static void main(String[] args){ 
   
    new Server();
    }
    }

Client 端程序:

 package test;
 import java.io.*;
 import java.net.*;
 public class Client { 
   
 Socket socket;
 BufferedReader in;
 PrintWriter out;
 public Client(){ 
   
 try { 
   
 System.out.println("Try to Connect to
 127.0.0.1:10000");
 socket = new Socket("127.0.0.1",10000);
 System.out.println("The Server Connected!");
 System.out.println("Please enter some Character:");
 BufferedReader line = new BufferedReader(new
 InputStreamReader(System.in));
 out = new PrintWriter(socket.getOutputStream(),true);
 out.println(line.readLine());
 in = new BufferedReader(
 new InputStreamReader(socket.getInputStream()));
 System.out.println(in.readLine());
 out.close();
 in.close();
 socket.close();
 }catch(IOException e){ 
   
 out.println("Wrong");
 }
 }
 public static void main(String[] args) { 
   
 new Client();
 }
 }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106563.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 在线文字识别转换「建议收藏」

    在线文字识别转换「建议收藏」在线文字识别转换http://ocr.wdku.net/conv/index.html

    2022年8月4日
    6
  • shell for循环、循环变量值付给其他shell脚本

    shell for循环、循环变量值付给其他shell脚本本文主要将在shell中如何编写for循环,并将循环变量作为下个shell脚本的参数。

    2022年7月24日
    13
  • 哪些线程是安全的_redis是线程安全的吗

    哪些线程是安全的_redis是线程安全的吗Java中平时用的最多的map就是hashmap但是它却是线程不安全的。那除了hashmap还有哪些常见的线程安全的map?1.hashtableMap<String,Object>hashtable=newHashtable<String,Object>();这是所有人最先想到的,那为什么她是线程安全的?那就看看她的源码,我们可以看出我们常用的put,get,…

    2022年4月20日
    40
  • goland 2021.9 激活码【最新永久激活】

    (goland 2021.9 激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/ide…

    2022年3月26日
    83
  • python win32api messagebox_如何在Python中使用Win32 API?

    python win32api messagebox_如何在Python中使用Win32 API?PyWin32是必经之路-但是如何使用它呢?一种方法是从遇到的具体问题开始并尝试解决它。PyWin32提供了许多Win32API函数的绑定,您确实必须首先选择一个特定的目标。在我的Python2.5安装中(在Windows上为ActiveState),win32软件包具有一个Demos文件夹,其中包含该库各个部分的示例代码。例如,这是CopyFileEx.py:importwin32file…

    2022年8月31日
    1
  • Maven 生成打包可执行jar包

    Maven 生成打包可执行jar包文章目录1.需求2.开发环境3.Maven打包插件介绍4.Maven使用maven-jar-plugin打可执行jar包5.Maven使用maven-assembly-plugin装需要打包的文件打进zip包6.Maven生成可执行jar包及zip项目压缩包7.执行jar包8.pom.xml配置9.package.xml文件最近IDEA打可执行Jar包搞了三天,一直失败,好好学…

    2022年5月30日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号