readUTF()使用报 java.io.EOFException异常

今天在编程的时候,用到了DataInPutStream类的readUTF()方法时报了个异常,查了好多资料也不能解决,求大神指点啊.高分悬赏.

 package IO流;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class DataTest {

    /**
     * 数据输入输出流
     * 
     */
    public static void main(String[] args) throws IOException {
        //向指定文件中写入数据
        //打开文件输出流
        FileOutputStream fos=new FileOutputStream("G://word.txt");
        //将此输出流链接到指定基础输出流DataOutPutStream
        DataOutputStream dos=new DataOutputStream(fos);
        //写入数据:
        dos.writeBytes("我是大禹!");//用此方法写入的数据用记事本打开是乱码
        dos.writeChars("我治水!");//用此方法写入的数据用记事本打开是乱码
        dos.writeUTF("你智障吗?");
        //关闭流
        fos.close();
        //从文件中读取数据
        //首先打开文件输入流
        FileInputStream fis=new FileInputStream("G://word.txt");
        //将此输入流连接到基本数据输入流DataInPutStream
        DataInputStream dis=new DataInputStream(fis);
        //开始读取数据啦
//      String s=dis.readUTF();
        System.out.println(dis.readUTF());
        dis.close();







    }

}

异常信息:
Exception in thread "main" java.io.EOFException
at java.io.DataInputStream.readFully(DataInputStream.java:180)
at java.io.DataInputStream.readUTF(DataInputStream.java:592)
at java.io.DataInputStream.readUTF(DataInputStream.java:547)
at IO流.DataTest.main(DataTest.java:35)

6个回答

乱码是因为记事本的编码 GB2312、GBK、GB18030、Big5、Shift_JIS问题引起的,读写编码方式应一致,记事本能存储文本类型的。
你这样子是用了几种编码方式往文件里写东西了。
dos.writeBytes(),按照1个字节方式写入 123abc英文是没问题的,至少写入能显示出来123abc,但如果你把汉字写入就会出现乱码了
dos.writeChars(),char占2个字节,按照2个字节的方式写入 123abc能显示出来,但是记事本里会变这样子 1 2 3 a b c,如果中文则会乱码

要对记事本读写汉字,你把前面两个写入方法注释后,只用writeUTF()写入,读取时用readUTF()读取,就没问题了。_

java.io.EOFException这个表示读到了文件尾,没数据可读了

itguangit
PostTruth 可是我不知道怎么该啊,
大约 4 年之前 回复

直接fileinputstream读取呗

itguangit
PostTruth 我想用DataInPutStream类的readUTF()方法,该咋弄啊
大约 4 年之前 回复

虽然我不清楚DataOutputStream 这个类的,但是你读取数据的时候应该加个while循环判断是否读到尾部了

要按照写入数据的顺序读取,第一个读取应该是读取readBytes,不该是utf

顶一个,第一位大佬的回答让我找到了我的问题所在:
我在序列化一个int值的时候,使用write(a),因为使用时看到write可以直接写int类型;
但我在反序列化时,却使用了readInt(a)来读,两者类型不匹配导致我报了这个错。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
readUTF报错java.io.EOFException?
import java.io.*; public class DataInputstream { public static void main(String[] args) { int n; String s; try { DataInputStream dis=new DataInputStream(new FileInputStream("E:\\a.txt"));//文件夹内是“java编程”路径是绝对路径 s=dis.readUTF(); n=dis.readInt(); System.out.println(s); System.out.println(n); }catch (Exception e){ System.out.println(e); System.out.println("fail"); } } } //注销掉s=dis.readUTF();和system.out.println(s);之后输出的是-408384539 //这是哪里出问题了吗,还是语言语法错了?
socket C Java java.io.EOFException
问题是这样的 socket server 是Java实现的 socket 客户端是C语言实现的 当客户端发请求时,server端input.readUTF()时报java.io.EOFException,网上查了,说是读取输入流末尾还读 会报这个错,try{...} catch{java.io.EOFException e}就可以了。但是我添加了后,日志不报错,对方说还是没有响应。说明还是有问题。 不知该怎么解决了。请各位看看。 请求报文为xml格式的String 我本地自己Java写的客户端测试是可以的。 代码如下: public class SocketServer extends Thread implements Runnable { private ServletConfig sce; private WebApplicationContext appConent; //构造函数 public SocketServer(ServletConfig sce,WebApplicationContext appConent){ this.sce=sce; this.appConent=appConent; } public void run() { try{ ServerSocket listener=new ServerSocket(5555); Socket server; while(true){ //开始监听 server=listener.accept() ; NetWorkServer nwServer=new NetWorkServer(server,sce,appConent); nwServer.start(); } } catch (Exception e){ e.printStackTrace(); } } } protected Socket socket; private static final Log log = LogFactory.getLog(NetWorkServer.class); private ServletConfig sce; private WebApplicationContext appConent; public NetWorkServer(Socket sThread,ServletConfig sce,WebApplicationContext appConent){ this.socket =sThread; this.sce=sce; this.appConent=appConent; } public void run() { try{ DataInputStream input = new DataInputStream(socket.getInputStream()); DataOutputStream output = new DataOutputStream(socket.getOutputStream()); //客户端请求传过来的String(这里是可以的,能收到客户端请求的String) String paraInfoXML = input.readUTF(); /*返回结果*/ String result = "" ; SAXReader reader=new SAXReader(); StringReader sr=new StringReader(paraInfoXML); org.xml.sax.InputSource is=new org.xml.sax.InputSource(sr); try { /*业务逻辑*/ Document doc=reader.read(is); } catch (DocumentException e) { e.printStackTrace(); } output.writeUTF(result); output.flush(); output.close(); input.close(); //关闭连接 socket.close(); } catch (IOException e){ e.printStackTrace(); } }
请求大佬支援!数据流读写文件有误
![图片说明](https://img-ask.csdn.net/upload/201906/01/1559371527_57724.png) ``` package com.sxt.io; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInput; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; /* * 数据流 * 1.写出后读取 * 2.读取的顺序与写出的顺序保持一致 * DataOutputStream DataInputStream * */ public class DataTests { public static void main(String[] args) throws IOException { //写出 OutputStream bos = new FileOutputStream(new File("abc.txt")); DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(bos)); //操作数据类型+数据 dos.writeUTF("编码辛酸泪,谁解其中味"); dos.writeInt(18); dos.writeBoolean(true); dos.writeChar('a'); dos.flush(); String line; while((line=(bos.readLine())!=null) { } //读取 DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(line))); //顺序与写出顺序一致 String msg = dis.readUTF(); int age = dis.readInt(); Boolean flag = dis.readBoolean(); char ch = dis.readChar(); System.out.println(age); } } ```
Hadoop序列化问题,实现WritableComparable,readFields报错EOFException
``` public class MyKey implements WritableComparable<MyKey> { //flag == 1 : user //flag == 0 : shopping private Integer flag; private Integer u_id; private Integer s_id; private Integer s_u_id; private String u_info; private String s_info; @Override public int compareTo(MyKey o) { if (flag.equals(1)){ //user return u_id - o.u_id; }else { //shopping return s_id - o.s_id; } } @Override public void write(DataOutput out) throws IOException { out.writeInt(flag); out.writeInt(u_id); out.writeInt(s_id); out.writeInt(s_u_id); out.writeUTF(u_info); out.writeUTF(s_info); } @Override public void readFields(DataInput in) throws IOException { flag = in.readInt(); u_id = in.readInt(); s_id = in.readInt(); s_u_id = in.readInt(); u_info = in.readUTF(); s_info = in.readUTF(); } } ``` 报错异常 2018-10-08 19:55:15,246 INFO Configuration.deprecation: mapred.skip.on is deprecated. Instead, use mapreduce.job.skiprecords 2018-10-08 19:55:15,250 INFO mapred.LocalJobRunner: reduce task executor complete. 2018-10-08 19:55:15,253 WARN mapred.LocalJobRunner: job_local85671337_0001 java.lang.Exception: java.lang.RuntimeException: java.io.EOFException at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:492) at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:559) Caused by: java.lang.RuntimeException: java.io.EOFException at org.apache.hadoop.io.WritableComparator.compare(WritableComparator.java:165) at org.apache.hadoop.mapreduce.task.ReduceContextImpl.nextKeyValue(ReduceContextImpl.java:158) at org.apache.hadoop.mapreduce.task.ReduceContextImpl.nextKey(ReduceContextImpl.java:121) at org.apache.hadoop.mapreduce.lib.reduce.WrappedReducer$Context.nextKey(WrappedReducer.java:302) at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:170) at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:628) at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:390) at org.apache.hadoop.mapred.LocalJobRunner$Job$ReduceTaskRunnable.run(LocalJobRunner.java:347) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: java.io.EOFException at java.io.DataInputStream.readInt(DataInputStream.java:392) at sortjoin.MyKey.readFields(MyKey.java:43) at org.apache.hadoop.io.WritableComparator.compare(WritableComparator.java:158) ... 12 more 2018-10-08 19:55:15,962 INFO mapreduce.Job: Job job_local85671337_0001 running in uber mode : false 2018-10-08 19:55:15,964 INFO mapreduce.Job: map 100% reduce 0%
新手学java io 输入数据和输出数据不一致?
代码:新手学IO [code="java"] package woca; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; public class FilterOutputTester { public static void main(String[] args) throws IOException { FileOutputStream out1 = new FileOutputStream("D:\\test.txt"); BufferedOutputStream out2 = new BufferedOutputStream(out1, 256); DataOutputStream out = new DataOutputStream(out2); out.writeUTF("你好啊"); out.writeUTF("再见"); out.close(); InputStream in1 = new FileInputStream("D:\\test.txt"); BufferedInputStream in2 = new BufferedInputStream(in1, 3); DataInputStream in = new DataInputStream(in2); System.out.println(in.readUTF()); in1.close(); } } [/code] 大家也能看到我往 D盘test里边先写入 了 字符"你好啊"又写入了"再见" 也写入进去了 但是读取出来的却只有[color=red]你好啊[/color]这是怎么回事啊? 谢谢了 ! 我实在是想不到答案了!
socket编程发送消息出现socket closed求大神,急
import java.io.DataInputStream; import java.io.EOFException; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class Server { ServerSocket ss; Socket s ; Clients clients; DataInputStream dis; boolean startServer = false; public void startServer(){ try { ss = new ServerSocket(8888);//8888是TCP端口号 startServer = true; while(startServer){ s = ss.accept(); System.out.println(" connected!"); clients = new Clients(s); new Thread(clients).start(); } }catch(IOException e){ e.printStackTrace(); }finally{ try { ss.close(); } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) { new Server().startServer(); } } class Clients implements Runnable{//包装类,把外部连接的client包装 private Socket s; private boolean isConnected = false ; private DataInputStream dis; public Clients(Socket s) { this.s = s; try { isConnected = true; dis = new DataInputStream(s.getInputStream()); } catch (IOException e) { e.printStackTrace(); } } @Override public void run() { while(isConnected){ try { String str = dis.readUTF();//阻塞:它会一直等待 System.out.println(str); } catch (EOFException e){ System.out.println("Client is closed!"); }catch (IOException e1) { e1.printStackTrace(); }finally{ try { if(dis!=null) { dis.close(); }else{ ; } if(s!=null) { s.close(); }else{ ; } } catch (IOException e) { e.printStackTrace(); } } } } } import java.io.DataOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; public class Client { Socket s; PrintWriter pw; DataOutputStream dos; String line = ""; Scanner reader = new Scanner(System.in); public void startClient(){ try { s = new Socket("127.0.0.1", 8888); dos = new DataOutputStream(s.getOutputStream()); System.out.println("connected"); do{ System.out.print("please input:"); line = reader.next(); dos.writeUTF(line); dos.flush(); }while(!line.equals("bye")); dos.close(); s.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { new Client().startClient(); } } java.net.SocketException: socket closed at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(Unknown Source) at java.net.SocketInputStream.read(Unknown Source) at java.net.SocketInputStream.read(Unknown Source) at java.io.DataInputStream.readUnsignedShort(Unknown Source) at java.io.DataInputStream.readUTF(Unknown Source) at java.io.DataInputStream.readUTF(Unknown Source) at Clients.run(Server.java:75) at java.lang.Thread.run(Unknown Source)
把数据+类型写入字节数组里这个程序总错,求大神指出错的地方,或者给出正确的代码,感激不尽
package 处理流; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; public class Demo02 { public static void main(String[] args) throws IOException{ read(write()); } //把数据+类型写到字节数组里 public static byte[] write()throws IOException { byte[] b2=null; ByteArrayOutputStream dos=new ByteArrayOutputStream(); DataOutputStream out=new DataOutputStream( new BufferedOutputStream(dos)); double point=3.14159; int num=2628; String str="我是汪洋"; String str02="刘林是我同学"; out.writeDouble(point); out.writeInt(num); out.writeUTF(str); out.writeUTF(str02); dos.flush(); b2=dos.toByteArray(); return b2; } //从字节数组中获得数据+类型 public static void read(byte[] b2)throws IOException { DataInputStream into=new DataInputStream( new BufferedInputStream( new ByteArrayInputStream(b2))); System.out.println("point="+into.readDouble()); System.out.println("num="+into.readInt()); System.out.println("str="+into.readUTF()); System.out.println("str02="+into.readUTF()); } }
google的protobuf比这样java原生的方式更有效率吗?
@Override public void write(java.io.DataOutput do) throws IOException { do.writeUTF(this.string1); do.writeUTF(this.string1); do.writeLong(this.long1); } @Override public void readFields(java.io.DataInput di) throws IOException { this.string1= di.readUTF(); this.string2 = di.readUTF(); this.long1 = di.readLong(); } 如果更有效率,为什么?和java这样比有什么优缺点? 另外下面这个链接的结果是啥意思? https://github.com/eishay/jvm-serializers/wiki
使用socket通信,android客户端,java写的服务器,传输数据时总出现异常
客户端: public void run() { // TODO Auto-generated method stub try { s = new Socket(ip, port); DataOutputStream os = new DataOutputStream(s.getOutputStream()); os.writeUTF("可以准备接收了吗?"); ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream()); out.writeObject(u); out.flush(); out.close(); System.out.println("用户名是:"+u.getID()); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } ``` ``` 服务器: ``` try{ ServerSocket ss = new ServerSocket(9999); System.out.println("服务器正在监听!"); Socket s = ss.accept(); System.out.println("建立连接!"); DataInputStream is = new DataInputStream(s.getInputStream()); String str = is.readUTF(); System.out.println(str); ObjectInputStream ois = new ObjectInputStream(s.getInputStream()); User u = (User)ois.readObject(); ois.close(); System.out.println("用户ID :"+u.getID()); }catch(Exception e){ e.printStackTrace(); } ``` 异常: java.net.SocketException: Connection reset at java.net.SocketInputStream.read(Unknown Source) at java.net.SocketInputStream.read(Unknown Source) at java.net.SocketInputStream.read(Unknown Source) at java.io.DataInputStream.readUnsignedShort(Unknown Source) at java.io.DataInputStream.readUTF(Unknown Source) at java.io.DataInputStream.readUTF(Unknown Source) at com.server.EasyServer.main(EasyServer.java:24) (在os.writeUTF一行)
encoded string too long: 65729
java.io.UTFDataFormatException: encoded string too long: 65729 bytes at java.io.DataOutputStream.writeUTF(DataOutputStream.java:364) at java.io.DataOutputStream.writeUTF(DataOutputStream.java:323) at socket.Server$3.run(Server.java:694) at java.lang.Thread.run(Thread.java:745) 请问上面的异常报错如何解决,潮手请各位大仙给个代码示例 报错源代码如下: //接收客户端消息 DataInputStream input=new DataInputStream(client.getInputStream()); DataOutputStream output=new DataOutputStream(client.getOutputStream()); String inputString=input.readUTF(); logger.info("客户端访问信息:"+inputString); 。。。。。。。。。 。。。。。。。。。 jsonString =jsonObjectCustomer.toString(); System.out.println("Server.java封装完成的json数据格式:"+jsonString); //向客户端返回消息 try { output.writeUTF(jsonString); 。。。。。。。。。。。。 。。。。。 我传递的这个jsonString字符串参数是无限大的, 提示向客户端传输jsonString的时候报的异常,该如何解决
安卓 和python 服务端通信,安卓收不到服务端返回
用安卓和python的服务端通过socket进行通信, server端可以接收信息,但无法返回到安卓。 安卓 ``` try{ //port number 8888 Socket s1=new Socket(ipAdress,8883); OutputStream os=s1.getOutputStream(); DataOutputStream dos=new DataOutputStream(os); dos.writeUTF(etxtUserName.getText().toString() + " " + etxtPassword.getText().toString());// send usr_name and pwd to server //wait new Handler().postDelayed(new Runnable(){ public void run() { //execute the task } }, 1000); dos.flush(); s1.shutdownOutput(); // InputStream is=s1.getInputStream(); DataInputStream dis=new DataInputStream(is); String getStr=dis.readUTF();//YES or NO //String getStr = "YES"; if(getStr.equals("YES")){ intent.setClass(LogInActivity.this, personalActivity.class); LogInActivity.this.startActivity(intent); ``` python server ``` import socket # 导入 socket 模块 from time import ctime import time port = 8883 # 设置端口 host = socket.gethostname() # 获取本地主机名 BUFSIZE = 1024 tcp_socket = socket.socket() # 创建 socket 对象 tcp_socket.bind((host, port)) # 绑定端口 tcp_socket.listen(5) # 等待客户端连接 while True: tcpcli_socket, addr = tcp_socket.accept() # 建立客户端连接。 print ('连接地址:', addr) #c.send('we are top 1 group') data = tcpcli_socket.recv(BUFSIZE) print (data) tcpcli_socket.send("YES".encode('utf-8')) print ('done') tcpcli_socket.close() # 关闭连接 ``` 报错信息 ``` W/System.err: java.io.EOFException at java.io.DataInputStream.readFully(DataInputStream.java:200) at java.io.DataInputStream.readUTF(DataInputStream.java:606) at java.io.DataInputStream.readUTF(DataInputStream.java:561) at com.example.tianmingyang.carpool.LogInActivity$MyButtonOnClickListener.onClick(LogInActivity.java:78) at android.view.View.performClick(View.java:6294) ```
关于Java socket 聊天程序中如何把线程1的文本传到其他线程中
服务器端的代码: package 实验室项目一; import java.io.DataInputStream; import java.io.DataOutputStream; import java.net.ServerSocket; import java.net.Socket; import java.io.IOException; import java.net.InetAddress; public class Server { public static void main(String[] args) { try { //1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口 ServerSocket serverSocket=new ServerSocket(10086); Socket socket=null; //记录客户端的数量 int count=0; System.out.println("***服务器即将启动,等待客户端的连接***"); //循环监听等待客户端的连接 while(true){ //调用accept()方法开始监听,等待客户端的连接 socket=serverSocket.accept(); //创建一个新的线程 ServerThread serverThread=new ServerThread(socket); //启动线程 serverThread.start(); count++;//统计客户端的数量 System.out.println("客户端的数量:"+count); InetAddress address=socket.getInetAddress(); System.out.println("当前客户端的IP:"+address.getHostAddress()); } } catch (IOException e) { e.printStackTrace(); } } } package 实验室项目一; /** * 服务器线程处理类 */ import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; public class ServerThread extends Thread { // 和本线程相关的Socket Socket socket = null; public ServerThread(Socket socket) { this.socket = socket; } //线程执行的操作,响应客户端的请求 public void run(){ String msg;//客户端的消息 DataInputStream is=null; DataOutputStream os=null; try { //获取输入流,并读取客户端信息 is = new DataInputStream(socket.getInputStream()); msg=is.readUTF(); //获取输出流,响应客户端的请求 os = new DataOutputStream(socket.getOutputStream()); os.writeUTF(msg);//注意 啊,写到这儿不知道怎么把数据传到其他的线程中 } catch (IOException e) { e.printStackTrace(); }finally{ //关闭资源 try { if(is!=null) is.close(); if(socket!=null) socket.close(); } catch (IOException e) { e.printStackTrace(); } } } }
socket服务端可以接受消息但是无法返回的问题
这是服务端代码 [code="java"] package com.hj.demo.socket; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class Server { public Server() throws IOException { ServerSocket ss = new ServerSocket(7777); while (true) { Socket sk = ss.accept(); ClientThread ct = new ClientThread(sk); ct.start(); System.out.println("服务端已启动..."); } } // 多线程客户端 class ClientThread extends Thread { private Socket clientSocket = null; public ClientThread(Socket clientSocket) { this.clientSocket = clientSocket; } DataInputStream dis = new DataInputStream(null); @SuppressWarnings("deprecation") @Override public void run() { // TODO Auto-generated method stub String hostName = clientSocket.getInetAddress().toString(); System.out.println("hostName:>" + hostName+"已连接"); String msg = null; try { dis = new DataInputStream(clientSocket .getInputStream()); while (true) { msg = dis.readUTF(); System.out.println(hostName + "发来的消息>: " + msg); if(null==dis.readLine()||"".equals(dis.readLine())){ break; } } if(!"".equals(msg)&&msg.length()!=0){ DataOutputStream dos = new DataOutputStream(clientSocket.getOutputStream()); String rep = "我是返回给由"+hostName+"发来["+msg+"]的消息"; System.out.println(rep); dos.writeUTF(rep); dos.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } super.run(); } } public static void main(String[] args) throws IOException { new Server(); } } [/code] 这是客户端的代码 [code="java"] package com.hj.demo.socket; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; public class Client { public static void main(String[] args) throws UnknownHostException, IOException, InterruptedException { Socket sk = new Socket("127.0.0.1", 7777); DataOutputStream dos = new DataOutputStream(sk.getOutputStream()); DataInputStream dis = new DataInputStream(sk.getInputStream()); dos.writeUTF("hello,world"); String rep = dis.readUTF(); System.out.println("主机返回的消息>: " + rep); dos.close(); dis.close(); } } [/code] 服务端可以接收发来的消息,但是返回就不行,求解答!
模拟客户端和服务端通信的的java小程序,但运行时显示ConnectException,求教
服务端程序: import java.net.*; import java.io.*; public class TestServer { public static void main( String []args) { try { ServerSocket ss = new ServerSocket(7777); while (true){ Socket s = ss.accept(); OutputStream os = s.getOutputStream(); DataOutputStream dos = new DataOutputStream(os); dos.writeUTF("hello " + s.getInetAddress() + s.getPort() + "byebye"); dos.flush(); dos.close(); s.close(); } } catch (Exception e) { e.printStackTrace(); } } } 客户端程序: import java.net.*; import java.io.*; public class TestClient { public static void main(String []args) { try { Socket s = new Socket("127.0.0.1",7777); DataInputStream dis = new DataInputStream(s.getInputStream()); System.out.println(dis.readUTF()); dis.close(); s.close(); }catch (Exception e) { e.printStackTrace(); } } } 两个程序运行在不同的命令行窗口上,但运行客户端程序的窗口显示java.net.ConnectException.这是为什么?
能不能在jp3板块帮忙添加按钮插入图片功能和改变一下面板的背景颜色,拜托谢谢各位大神!
``` public class Client_Test { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String ipAdd = "127.0.0.1"; int port =8000; Client client = new Client(ipAdd,port); } } ``` ``` import java.awt.BorderLayout; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; import javax.swing.*; public class Client extends JFrame { // 成员变量 JPanel jp1 = new JPanel(); JPanel jp2 = new JPanel(); JPanel jp3 = new JPanel(); JTextArea jta = new JTextArea(15, 40); JTextField jtf = new JTextField(); JButton jbt1 = new JButton("清除记录"); JButton jbt2 = new JButton("存储记录"); JButton jbt3 = new JButton("读取记录"); JLabel jlb = new JLabel(); FileWriter fw; FileReader fr; Socket socket = null; DataOutputStream dos = null; DataInputStream dis = null; String ipAdd = ""; int port = 0; String readStr = ""; String jtaStr = ""; // 构造方法 public Client(String ipAdd, int port) { setLocation(300, 400); setSize(400, 500); setVisible(true); add(jp1, BorderLayout.NORTH); add(jp2, BorderLayout.CENTER); add(jp3, BorderLayout.SOUTH); jp1.setLayout(new BorderLayout()); jp1.add(jta, BorderLayout.NORTH); jp1.add(jtf, BorderLayout.SOUTH); jp2.add(jbt1); jp2.add(jbt2); jp2.add(jbt3); jp3.add(jlb); jlb.setText("当前状态:"); pack(); this.ipAdd = ipAdd; this.port = port; // 调用网络连接 netConnect(); // 挂载侦听器 jtf.addActionListener(new MyActionListener()); jbt1.addActionListener(new MyActionListener()); jbt2.addActionListener(new MyActionListener()); jbt3.addActionListener(new MyActionListener()); } // 网络连接方法 public void netConnect() { try { socket = new Socket(this.ipAdd, this.port); jlb.setText("服务器连接成功" + socket); dos = new DataOutputStream(socket.getOutputStream()); dis = new DataInputStream(socket.getInputStream()); JtaReadThread jrt = new JtaReadThread(); Thread thread = new Thread(jrt); thread.start(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } // 新建侦听器类(内部类) private class MyActionListener implements ActionListener { public void actionPerformed(ActionEvent arg0) { if (arg0.getSource().equals(jtf)) { try { dos.writeUTF(jtf.getText()); jtf.setText(""); // jta.setText(jta.getText()+"\n"+dis.readUTF()); } catch (IOException e) { e.printStackTrace(); } } if (arg0.getSource().equals(jbt1)) { jta.setText(""); } // 保存记录侦听器 if (arg0.getSource().equals(jbt2)) { byte b[] = jta.getText().getBytes(); try { fw = new FileWriter("d:\\chatLog2.txt", true); fw.write(jta.getText()); fw.close(); } catch (IOException e) { e.printStackTrace(); } jlb.setText("记录保存成功"); } // // 读取记录侦听器------jbt3 :FR读取记录 if (arg0.getSource().equals(jbt3)) { int b = 0; try { fr = new FileReader("d:\\chatLog2.txt"); while ((b = fr.read()) != -1) { System.out.print((char) b); } fr.close(); } catch (IOException e) { e.printStackTrace(); } } } } // 新建子线程类,用于读取服务器发送的广播数据 private class JtaReadThread implements Runnable { @Override public void run() { // TODO Auto-generated method stub while (true) { try { readStr = dis.readUTF(); jtaStr = jtaStr + '\n' + readStr; jta.setText(jtaStr ); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } ``` ``` import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.List; //服务器工作过程: //1.指定某个端口提供TCP服务 //2.等待客户端的连接(阻塞:傻等) //3.如果需要接收多个客户端,建议使用“死”循环语句 public class Server { ServerSocket ss = null; Socket socket = null; int port =0; //集合:用于存储每个客户端和服务器的连接(存储子线程) List<SubThread> mylist = new ArrayList<SubThread>(); Server(int port) { this.port = port; try { ss = new ServerSocket(this.port); System.out.println("服务器已经启动,port8000"); while (true) { socket = ss.accept(); System.out.println("客户端已连接"); //传递socket 给子线程,socket参数在构造方法中传递 SubThread subThread = new SubThread(socket); //将构造好的子线程实例存入集合中 mylist.add(subThread); Thread thread = new Thread(subThread); thread.start(); } } catch (IOException e) { e.printStackTrace(); } } //新建内部类:子线程 private class SubThread implements Runnable{ //成员变量:通道、读写 Socket socket = null; DataInputStream dis = null; DataOutputStream dos = null; String strRead = ""; SubThread(Socket socket){ this.socket = socket; try { dis = new DataInputStream(socket.getInputStream()); dos = new DataOutputStream(socket.getOutputStream()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void run() { // TODO Auto-generated method stub //开始读写操作 while(true){ try { strRead = dis.readUTF(); System.out.println(strRead); for(int i=0; i<mylist.size(); i++){//遍历所有客户端,写! //取得当前的客户端的连接(socket)将strRead内容写给当前的客户端 mylist.get(i).dos.writeUTF(strRead); } } catch (IOException e) { e.printStackTrace(); } } } } } ``` ``` public class ServerRun { public static void main(String[] args) { // TODO Auto-generated method stub int serverPort = 8000; Server server = new Server(serverPort); } } ![图片说明](https://img-ask.csdn.net/upload/201906/27/1561601303_757012.jpg) ```
MapReducer 写入到数据库 报错
## 【 DBUserWritable 类 】 package org.neworigin.com.Database; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import org.apache.hadoop.io.WritableComparable; import org.apache.hadoop.mapreduce.lib.db.DBWritable; public class DBUserWritable implements DBWritable,WritableComparable{ private String name=""; private String sex=""; private int age=0; private int num=0; private String department=""; private String tables=""; @Override public String toString() { return "DBUserWritable [name=" + name + ", sex=" + sex + ", age=" + age + ", department=" + department + "]"; } public DBUserWritable(DBUserWritable d){ this.name=d.getName(); this.sex=d.getSex(); this.age=d.getAge(); this.num=d.getNum(); this.department=d.getDepartment(); this.tables=d.getTables(); } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public String getDepartment() { return department; } public void setDepartment(String department) { this.department = department; } public String getTables() { return tables; } public void setTables(String tables) { this.tables = tables; } public DBUserWritable(String name, String sex, int age, int num, String department, String tables) { super(); this.name = name; this.sex = sex; this.age = age; this.num = num; this.department = department; this.tables = tables; } public DBUserWritable() { super(); // TODO Auto-generated constructor stub } public void write(DataOutput out) throws IOException { // TODO Auto-generated method stub out.writeUTF(name); out.writeUTF(sex); out.writeInt(age); out.writeInt(num); out.writeUTF(department); out.writeUTF(tables); } public void readFields(DataInput in) throws IOException { // TODO Auto-generated method stub name = in.readUTF(); sex=in.readUTF(); age=in.readInt(); num=in.readInt(); department=in.readUTF(); tables=in.readUTF(); } public int compareTo(Object o) { // TODO Auto-generated method stub return 0; } public void write(PreparedStatement statement) throws SQLException { // TODO Auto-generated method stub statement.setString(1, this.getName()); statement.setString(2, this.getSex()); statement.setInt(3, this.getAge()); statement.setString(4, this.getDepartment()); } public void readFields(ResultSet resultSet) throws SQLException { // TODO Auto-generated method stub this.name=resultSet.getString(1); this.sex=resultSet.getString(2); this.age=resultSet.getInt(3); this.department=resultSet.getString(4); } } ## 【mapper】 package org.neworigin.com.Database; import java.io.IOException; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; public class UserDBMapper extends Mapper<LongWritable, Text, Text, DBUserWritable> { DBUserWritable DBuser= new DBUserWritable(); @Override protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, DBUserWritable>.Context context) throws IOException, InterruptedException { String[] values=value.toString().split(" "); if(values.length==4){ DBuser.setName(values[0]); DBuser.setSex(values[1]); DBuser.setAge(Integer.parseInt(values[2])); DBuser.setNum(Integer.parseInt(values[3])); DBuser.setTables("t1"); System.out.println("mapper---t1---------------"+DBuser); context.write(new Text(values[3]),DBuser); } if(values.length==2){ DBuser.setNum(Integer.parseInt(values[0])); DBuser.setDepartment(values[1]); DBuser.setTables("t2"); context.write(new Text(values[0]),DBuser); //System.out.println("mapper --t2"+"--"+values[0]+"----"+DBuser); } } } ## 【reducer 】 package org.neworigin.com.Database; import java.io.IOException; import java.util.LinkedList; import java.util.List; import org.apache.hadoop.io.NullWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer; public class UserDBReducer extends Reducer<Text, DBUserWritable,NullWritable,DBUserWritable> { // public DBUserWritable db= new DBUserWritable(); @Override protected void reduce(Text k2, Iterable<DBUserWritable> v2, Reducer<Text, DBUserWritable, NullWritable,DBUserWritable>.Context context) throws IOException, InterruptedException { String Name=""; List<DBUserWritable> list=new LinkedList<DBUserWritable>(); for(DBUserWritable val : v2){ list.add(new DBUserWritable(val));//new 一个对象 给list // System.out.println("[table]"+val.getTables()+"----key"+k2+"---"+val); if(val.getTables().equals("t2")){ Name=val.getDepartment(); } } //键是 num for(DBUserWritable join : list){ System.out.println("[table]"+join.getTables()+"----key"+k2+"---"+join); if(join.getTables().equals("t1")){ join.setDepartment(Name); System.out.println("db-----"+join); context.write(NullWritable.get(), join); } } } } ## 【app】 package org.neworigin.com.Database; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.NullWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.lib.db.DBConfiguration; import org.apache.hadoop.mapreduce.lib.db.DBOutputFormat; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class UserDBAPP { public static void main(String[] args) throws Exception, URISyntaxException { // TODO Auto-generated method stub String INPUT_PATH="file:///E:/BigData_eclipse_database/Database/data/table1"; String INPUT_PATH1="file:///E:/BigData_eclipse_database/Database/data/table2"; // String OUTPUT_PARH="file:///E:/BigData_eclipse_database/Database/data/output"; Configuration conf = new Configuration(); // FileSystem fs=FileSystem.get(new URI(OUTPUT_PARH),conf); // if(fs.exists(new Path(OUTPUT_PARH))){ // fs.delete(new Path(OUTPUT_PARH)); // } Job job = new Job(conf,"mydb"); //设置数据库配置 DBConfiguration.configureDB(conf, "com.mysql.jdbc.Driver", "jdbc:mysql://localhost/hadoop", "root", "123456"); FileInputFormat.addInputPaths(job,INPUT_PATH); FileInputFormat.addInputPaths(job,INPUT_PATH1); job.setMapperClass(UserDBMapper.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(DBUserWritable.class); job.setReducerClass(UserDBReducer.class); job.setOutputKeyClass(NullWritable.class); job.setOutputValueClass(DBUserWritable.class); // FileOutputFormat.setOutputPath(job, new Path(OUTPUT_PARH)); //设置输出路径 DBOutputFormat.setOutput(job,"user_tables", "name","sex","age","department"); job.setOutputFormatClass(DBOutputFormat.class); boolean re = job.waitForCompletion(true); System.out.println(re); } } 【报错】ps 表链接 ,写到本地没问题 写到数据库 就报错; 17/11/10 11:39:11 WARN output.FileOutputCommitter: Output Path is null in cleanupJob() 17/11/10 11:39:11 WARN mapred.LocalJobRunner: job_local1812680657_0001 java.lang.Exception: java.io.IOException at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462) at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:529) Caused by: java.io.IOException at org.apache.hadoop.mapreduce.lib.db.DBOutputFormat.getRecordWriter(DBOutputFormat.java:185) at org.apache.hadoop.mapred.ReduceTask$NewTrackingRecordWriter.<init>(ReduceTask.java:541) at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:614) at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:389) at org.apache.hadoop.mapred.LocalJobRunner$Job$ReduceTaskRunnable.run(LocalJobRunner.java:319) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) 17/11/10 11:39:12 INFO mapreduce.Job: Job job_local1812680657_0001 running in uber mode : false 17/11/10 11:39:12 INFO mapreduce.Job: map 100% reduce 0% 17/11/10 11:39:12 INFO mapreduce.Job: Job job_local1812680657_0001 failed with state FAILED due to: NA 17/11/10 11:39:12 INFO mapreduce.Job: Counters: 35
求问用C/C++实现以下JAVA代码的功能麻烦吗,求帮助...
是一个Socket的服务端,接收客户端发来的文件后,再返回一个文件。 package sock; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.net.ServerSocket; import java.net.Socket; /** 服务器 */ public class Server extends ServerSocket{ private static final int PORT =2013; private ServerSocket server; // private ArrayList list = new ArrayList(); private DataInputStream dis; private FileOutputStream fos; public Server()throws Exception{ try { try { server =new ServerSocket(PORT); System.out.println("服务器启动成功……"); while(true){ Socket client = server.accept(); // list.add(client); new Thread(new FileFetcher(client)).start(); } }catch (Exception e) { e.printStackTrace(); } }catch (Exception e) { e.printStackTrace(); } } class FileFetcher implements Runnable{ private Socket client = null; public FileFetcher(Socket client){ this.client = client; } @Override public void run() { // TODO Auto-generated method stub try{ dis =new DataInputStream(client.getInputStream()); //文件名和长度 String fileName = dis.readUTF(); long fileLength = dis.readLong(); File file = new File("E:/Server/" + client.getInetAddress() + "-" +fileName); fos =new FileOutputStream(file); byte[] sendBytes =new byte[1024]; int transLen =0; System.out.println("----开始接收文件<" + fileName +">,文件大小为<" + fileLength +">----"); while(true){ int read =0; read = dis.read(sendBytes); if(read == -1) break; transLen += read; System.out.println("接收文件进度" +100 * transLen/fileLength +"%..."); fos.write(sendBytes,0, read); fos.flush(); if (transLen == fileLength){ break; } } System.out.println("----接收文件<" + fileName +">成功-------"); File result = dealWithFile(file); DataOutputStream out = new DataOutputStream( client.getOutputStream()); if (result == null){ String resultStr = "未处理文件,请重试!"; System.out.println(resultStr); out.write(resultStr.getBytes()); out.flush(); out.close(); return ; } FileInputStream in = new FileInputStream(result); out.writeUTF(result.getName()); out.flush(); out.writeLong(result.length()); out.flush(); byte[] getbytes = new byte[1024]; while (true){ int tempRead = 0; tempRead = in.read(getbytes); if (tempRead == -1){ break; } out.write(getbytes, 0, tempRead); } out.flush(); out.close(); in.close(); client.close(); } catch (Exception e){ e.printStackTrace(); } finally { try{ if(dis !=null) dis.close(); if(fos !=null) fos.close(); //server.close(); } catch (Exception e){ e.printStackTrace(); } } } private File dealWithFile(File file){ return new File("E:/Server/ad/1.jpg"); //return null; } } public static void main(String[] args)throws Exception { new Server(); } }
TCPsocket实现一对一通信问题
只需要实现简单的通信,但是服务器没有提示,怎么改 import java.io.*; import java.net.*; class Client{ public static void main(String[] args) { try { Socket socket = new Socket("127.0.0.1", 5050); DataOutputStream out = new DataOutputStream(socket.getOutputStream()); out.writeUTF("我是客户机");//使用UTF-8编码传递字符串 DataInputStream in = new DataInputStream(socket.getInputStream()); String s = in.readUTF(); out.flush(); System.out.println("客户机收到:" + s); in.close(); out.close(); socket.close(); } catch (Exception e) { } } } 服务器端代码 import java.io.*; import java.net.*; class Server { public static void main(String[] args) { try { ServerSocket s_socket = new ServerSocket(5050); Socket socket = s_socket.accept(); DataInputStream in = new DataInputStream(socket.getInputStream()); DataOutputStream out = new DataOutputStream(socket.getOutputStream()); boolean goon=true; String s; while (goon) { s = in.readUTF(); if (!s.equals("byte")) { System.out.println("服务器收到:" + s); out.writeUTF("我是服务器"); out.flush(); } else { goon=false; out.writeUTF("byte"); out.flush(); } in.close(); out.close(); s_socket.close(); } } catch (Exception e) { } } } 运行之后没显示
为什么我的图片传输不了,但通信可以?
package com.example.socketserver; import java.io.DataInputStream; import java.io.File; import java.io.BufferedInputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.io.DataOutputStream; import java.io.FileInputStream; /** * 服务端 * */ public class SocketServer{ public static void main(String[] args) { startService(); } /** * 启动服务监听,等待客户端连接 */ private static void startService() { try { // 创建ServerSocket ServerSocket serverSocket = new ServerSocket(8888); System.out.println("--开启服务器,监听端口 8888--"); // 监听端口,等待客户端连接 while (true) { System.out.println("--等待客户端连接--"); Socket socket = serverSocket.accept(); //等待客户端连接 System.out.println("得到客户端连接:" + socket); startReader(socket); } } catch (IOException e) { e.printStackTrace(); } } /** * 从参数的Socket里获取最新的消息 */ private static void startReader(final Socket socket) { new Thread(){ @Override public void run() { DataInputStream reader; try { // 获取读取流 reader = new DataInputStream( socket.getInputStream()); while (true) { System.out.println("*等待客户端输入*"); // 读取数据 String msg = reader.readUTF(); System.out.println("获取到客户端的信息:" + msg); } } catch (IOException e) { e.printStackTrace(); } } public void start() { Socket s = null; try { ServerSocket ss = new ServerSocket(8888); while (true) { // 选择进行传输的文件 String filePath = "D:/downloads/q.jpg"; File fi = new File(filePath); System.out.println("文件长度:" + (int) fi.length()); // public Socket accept() throws // IOException侦听并接受到此套接字的连接。此方法在进行连接之前一直阻塞。 s = ss.accept(); System.out.println("建立socket链接"); DataInputStream dis = new DataInputStream(new BufferedInputStream(s.getInputStream())); dis.readByte(); DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath))); DataOutputStream ps = new DataOutputStream(s.getOutputStream()); //将文件名及长度传给客户端。这里要真正适用所有平台,例如中文名的处理,还需要加工,具体可以参见Think In Java 4th里有现成的代码。 ps.writeUTF(fi.getName()); ps.flush(); ps.writeLong((long) fi.length()); ps.flush(); int bufferSize = 8192; byte[] buf = new byte[bufferSize]; while (true) { int read = 0; if (fis != null) { read = fis.read(buf); } if (read == -1) { break; } ps.write(buf, 0, read); } ps.flush(); // 注意关闭socket链接哦,不然客户端会等待server的数据过来, // 直到socket超时,导致数据不完整。 fis.close(); s.close(); System.out.println("文件传输完成"); } } catch (Exception e) { e.printStackTrace(); } } }.start(); } }
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Linux(服务器编程):15---两种高效的事件处理模式(reactor模式、proactor模式)
前言 同步I/O模型通常用于实现Reactor模式 异步I/O模型则用于实现Proactor模式 最后我们会使用同步I/O方式模拟出Proactor模式 一、Reactor模式 Reactor模式特点 它要求主线程(I/O处理单元)只负责监听文件描述符上是否有事件发生,有的话就立即将时间通知工作线程(逻辑单元)。除此之外,主线程不做任何其他实质性的工作 读写数据,接受新的连接,以及处...
阿里面试官问我:如何设计秒杀系统?我的回答让他比起大拇指
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图和个人联系方式,欢迎Star和指教 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了...
五年程序员记流水账式的自白。
不知觉已中码龄已突破五年,一路走来从起初铁憨憨到现在的十九线程序员,一路成长,虽然不能成为高工,但是也能挡下一面,从15年很火的android开始入坑,走过java、.Net、QT,目前仍处于android和.net交替开发中。 毕业到现在一共就职过两家公司,目前是第二家,公司算是半个创业公司,所以基本上都会身兼多职。比如不光要写代码,还要写软著、软著评测、线上线下客户对接需求收集...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n
一文详尽系列之模型评估指标
点击上方“Datawhale”,选择“星标”公众号第一时间获取价值内容在机器学习领域通常会根据实际的业务场景拟定相应的不同的业务指标,针对不同机器学习问题如回归、分类、排...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
压测学习总结(1)——高并发性能指标:QPS、TPS、RT、吞吐量详解
一、QPS,每秒查询 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。互联网中,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。 二、TPS,每秒事务 TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆  每天早上8:30推送 作者| Mr.K   编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯
程序员该看的几部电影
##1、骇客帝国(1999) 概念:在线/离线,递归,循环,矩阵等 剧情简介: 不久的将来,网络黑客尼奥对这个看似正常的现实世界产生了怀疑。 他结识了黑客崔妮蒂,并见到了黑客组织的首领墨菲斯。 墨菲斯告诉他,现实世界其实是由一个名叫“母体”的计算机人工智能系统控制,人们就像他们饲养的动物,没有自由和思想,而尼奥就是能够拯救人类的救世主。 可是,救赎之路从来都不会一帆风顺,到底哪里才是真实的世界?
Python绘图,圣诞树,花,爱心 | Turtle篇
每周每日,分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。 公众号回复【进群】沟通交流吧,QQ扫码进群学习吧 微信群 QQ群 1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle()...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
还记得那个提速8倍的IDEA插件吗?VS Code版本也发布啦!!
去年,阿里云发布了本地 IDE 插件 Cloud Toolkit,仅 IntelliJ IDEA 一个平台,就有 15 万以上的开发者进行了下载,体验了一键部署带来的开发便利。时隔一年的今天,阿里云正式发布了 Visual Studio Code 版本,全面覆盖前端开发者,帮助前端实现一键打包部署,让开发提速 8 倍。 VSCode 版本的插件,目前能做到什么? 安装插件之后,开发者可以立即体验...
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布了 2019年国民经济报告 ,报告中指出:年末中国大陆总人口(包括31个
2019年除夕夜的有感而发
天气:小雨(加小雪) 温度:3摄氏度 空气:严重污染(399) 风向:北风 风力:微风 现在是除夕夜晚上十点钟,再有两个小时就要新的一年了; 首先要说的是我没患病,至少现在是没有患病;但是心情确像患了病一样沉重; 现在这个时刻应该大部分家庭都在看春晚吧,或许一家人团团圆圆的坐在一起,或许因为某些特殊原因而不能团圆;但不管是身在何处,身处什么境地,我都想对每一个人说一句:新年快乐! 不知道csdn这...
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o...
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
2020年的1月,我辞掉了我的第一份工作
其实,这篇文章,我应该早点写的,毕竟现在已经2月份了。不过一些其它原因,或者是我的惰性、还有一些迷茫的念头,让自己迟迟没有试着写一点东西,记录下,或者说是总结下自己前3年的工作上的经历、学习的过程。 我自己知道的,在写自己的博客方面,我的文笔很一般,非技术类的文章不想去写;另外我又是一个还比较热衷于技术的人,而平常复杂一点的东西,如果想写文章写的清楚点,是需要足够...
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
节后首个工作日,企业们集体开晨会让钉钉挂了
By 超神经场景描述:昨天 2 月 3 日,是大部分城市号召远程工作的第一天,全国有接近 2 亿人在家开始远程办公,钉钉上也有超过 1000 万家企业活跃起来。关键词:十一出行 人脸...
Java基础知识点梳理
Java基础知识点梳理 摘要: 虽然已经在实际工作中经常与java打交道,但是一直没系统地对java这门语言进行梳理和总结,掌握的知识也比较零散。恰好利用这段时间重新认识下java,并对一些常见的语法和知识点做个总结与回顾,一方面为了加深印象,方便后面查阅,一方面为了学好java打下基础。 Java简介 java语言于1995年正式推出,最开始被命名为Oak语言,由James Gosling(詹姆
2020年全新Java学习路线图,含配套视频,学完即为中级Java程序员!!
新的一年来临,突如其来的疫情打破了平静的生活! 在家的你是否很无聊,如果无聊就来学习吧! 世上只有一种投资只赚不赔,那就是学习!!! 传智播客于2020年升级了Java学习线路图,硬核升级,免费放送! 学完你就是中级程序员,能更快一步找到工作! 一、Java基础 JavaSE基础是Java中级程序员的起点,是帮助你从小白到懂得编程的必经之路。 在Java基础板块中有6个子模块的学
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
相关热词 c# 为空 判断 委托 c#记事本颜色 c# 系统默认声音 js中调用c#方法参数 c#引入dll文件报错 c#根据名称实例化 c#从邮件服务器获取邮件 c# 保存文件夹 c#代码打包引用 c# 压缩效率
立即提问