java使用readUTF()读取中文抛出EOFException异常的处理方法

Java文本文件正确读取方式

从文本文件读取时,类DataInputStream是错误的。正如文档所述,类DataInputStream用于从底层输入流中读取原始Java数据类型,而readUTF()使用某种修改的UTF-8格式(不是标准的UTF-8格式)。 
要从文本文件中读取,您应该使用Reader。java.io中存在的各种Reader类(例如BufferedReader,InputStreamReader,FileReader等)负责使用字符编码将数据从输入流转换为文本。 
解决方案一:

File file = new File("C:\\MyFile.txt");
fis = new FileInputStream(file);
 
isr = new InputStreamReader(fis, "UTF-8");
br = new BufferedReader(isr);
 
String line;
while ((line = br.readLine()) != null) {
  System.out.println(line);
}

解决方案二:

使用:

new String(file.readLine().getBytes("ISO-8859-1"),"utf-8");

替代readUTF()来获取文本中的中文。

转载于:https://www.cnblogs.com/heisen/p/9960060.html

import java.io.DataOutputStream; import java.io.OutputStream; import java.net.Socket; import java.util.Scanner; public class Client{ public static void main(String[] args)throws Exception { //基础任务一,使用tcp通信,创建Socket对象,并同时请求与服务端程序的连接 Socket csoc = new Socket("192.168.243.133", 8888); //2.从socket通信管道中得到一个字节输出流,用来发数据给服务端程序。 OutputStream outc = csoc.getOutputStream(); //3、把低级的字节输出流包装成数据输出流 DataOutputStream doutc = new DataOutputStream(outc); Scanner sc = new Scanner(System.in); while (true) { System.out.println("欢迎来到华南农业大学校科联自科部,请说:"); String msg = sc.nextLine(); //一旦用户输入了exit,就退出客户端程序 if ("exit".equals(msg)) { System.out.println("欢迎您下次光临!退出成功!"); doutc.close(); csoc.close(); break; } //4、开始写数据出去了,并且及时清理以免占用内存。 doutc.writeUTF(msg); doutc.flush(); } }客户端import java.net.ServerSocket; import java.net.Socket; public class server { public static void main(String[] args) throws Exception { System.out.println("---------服务器启动成功--------"); //1.基础任务任务一二创建Serversocket对象,同时为服务端注册端口。 ServerSocket ses = new ServerSocket(8888); //..进阶任务多线程 while (true) { //2.使用ServerSocket对象,调用一个accept方法,等待客户端连接请求 Socket csoc = ses.accept(); //3.把这个客户端的csoc通信管道,通过有参构造器交给下面独立的线程负责处理,把里面的东西读出来进行通信 new SeverReaderThread(csoc).start(); } } }服务端import java.io.DataInputStream; import java.io.InputStream; import java.net.Socket; public class SeverReaderThread extends Thread{ //下面是有参构造器,在这里再创建一个csoc接收处理 private Socket csoc; public SeverReaderThread(Socket csoc){ //把送进来的csoc管道给到上面的socket,把当前客户管道交给了一个独立的线程对象。 this.csoc=csoc; } @Override public void run() { //进阶任务:处理异常,得到输入流,包装成数据输入流 try{ InputStream is=csoc.getInputStream(); DataInputStream dis=new DataInputStream(is); while(true){ String msg=dis.readUTF(); System.out.println(msg); } } catch (Exception e) { throw new RuntimeException(e); } }独立线程对象,客户端和服务端都无法运行,因为语法分析时已达文件尾是什么意思,怎么改进,不加try
10-17
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值