请教,ObjectOutputStream写入到网络中报错!

我使用ObjectOutputStream从客户端写入对象到网络中,在服务器端读取对象,
然后保存到文件中。但是当我把对象写入到网络中时,出现异常。
client.java

 public class Client<M> {

    public void add(M m) {//向远程网络中存储对象
        Socket socket;
        ObjectOutputStream oos = null;
        try {
            try{
                socket = new Socket("127.0.0.1", 8011);
                OutputStream os = socket.getOutputStream();
                oos = new ObjectOutputStream(os);
                oos.writeObject(m);
                oos.flush();
            }finally {
                if(oos!=null){
                    oos.close();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } 
    }

}

Server.java

 public class Server {
    public static void main(String[] args) {
        new Server().startServer();
    }
    public void startServer(){
        ServerSocket ss;
        ServerThread st;
        try {
            ss = new ServerSocket(8011);
            while(true){
                System.out.println("服务已经开启");
                Socket socket = ss.accept();
                st = new ServerThread(socket);//创建线程对象
                ExecutorService es = Executors.newCachedThreadPool();
                es.execute(st); //开启线程
                es.shutdown();
                socket.close();//关闭socket
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

线程
ServerThread.java

 public class ServerThread implements Runnable{
    private Socket socket;
    //private ObjectOutputStream oos = new ObjectOutputStream();
    private FileOutputStream fos;
    private ObjectInputStream ois;
    public ServerThread(Socket socket) {
        this.socket = socket;
    }
    @Override
    public void run() {
        try {
            InputStream is = socket.getInputStream();
            ois = new ObjectInputStream(is);
            Object obj = ois.readObject();//读取网络中的对象

            System.out.println(obj);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if(ois!=null)
                    ois.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

错误如下:

 通过客户端向服务器写入对象
java.net.SocketException: Software caused connection abort: socket write error
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(Unknown Source)
    at java.net.SocketOutputStream.write(Unknown Source)
    at java.io.ObjectOutputStream$BlockDataOutputStream.drain(Unknown Source)
    at java.io.ObjectOutputStream$BlockDataOutputStream.flush(Unknown Source)
    at java.io.ObjectOutputStream.flush(Unknown Source)
    at java.io.ObjectOutputStream.close(Unknown Source)
    at com.fan.client.Client.add(Client.java:21)
    at com.fan.bean.BaseStore.save(BaseStore.java:22)
    at com.fan.execute.StudentExecute.studentExecute(StudentExecute.java:32)
    at com.fan.execute.StuSelectionCourseSys.startview(StuSelectionCourseSys.java:32)
    at com.fan.test.Test.main(Test.java:11)

希望同志们能给予我解答,十分感谢!!!!

3个回答

在你的server这个类中 你主动关闭了socket 导致socket is colsed

kai_12
Foutlook 回复搬运工666: 感谢感谢,我这点没有发现,我一直以为是客户端那边的问题。再次感谢!
大约 2 年之前 回复
DanShuiYunYan
搬运工666 你可以在你的线程中关闭 即在finally中
大约 2 年之前 回复
 public function output(Response $response, array $log = [])
    {
        $request     = Request::instance();
        $contentType = $response->getHeader('Content-Type');
        $accept      = $request->header('accept');
        if (strpos($accept, 'application/json') === 0 || $request->isAjax()) {
            return false;
        } elseif (!empty($contentType) && strpos($contentType, 'html') === false) {
            return false;
        }
        // 获取基本信息
        $runtime = number_format(microtime(true) - THINK_START_TIME, 10);
        $reqs    = $runtime > 0 ? number_format(1 / $runtime, 2) : '∞';
        $mem     = number_format((memory_get_usage() - THINK_START_MEM) / 1024, 2);

        if (isset($_SERVER['HTTP_HOST'])) {
            $uri = $_SERVER['SERVER_PROTOCOL'] . ' ' . $_SERVER['REQUEST_METHOD'] . ' : ' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
        } else {
            $uri = 'cmd:' . implode(' ', $_SERVER['argv']);
        }

        // 页面Trace信息
        $base = [
            '请求信息' => date('Y-m-d H:i:s', $_SERVER['REQUEST_TIME']) . ' ' . $uri,
            '运行时间' => number_format($runtime, 6) . 's [ 吞吐率:' . $reqs . 'req/s ] 内存消耗:' . $mem . 'kb 文件加载:' . count(get_included_files()),
            '查询信息' => Db::$queryTimes . ' queries ' . Db::$executeTimes . ' writes ',
            '缓存信息' => Cache::$readTimes . ' reads,' . Cache::$writeTimes . ' writes',
            '配置加载' => count(Config::get()),
        ];

        if (session_id()) {
            $base['会话信息'] = 'SESSION_ID=' . session_id();
        }

        $info = Debug::getFile(true);

        // 页面Trace信息
        $trace = [];
        foreach ($this->config['trace_tabs'] as $name => $title) {
            $name = strtolower($name);
            switch ($name) {
                case 'base': // 基本信息
                    $trace[$title] = $base;
                    break;
                case 'file': // 文件信息
                    $trace[$title] = $info;
                    break;
                default: // 调试信息
                    if (strpos($name, '|')) {
                        // 多组信息
                        $names  = explode('|', $name);
                        $result = [];
                        foreach ($names as $name) {
                            $result = array_merge($result, isset($log[$name]) ? $log[$name] : []);
                        }
                        $trace[$title] = $result;
                    } else {
                        $trace[$title] = isset($log[$name]) ? $log[$name] : '';
                    }
            }
        }

        //输出到控制台
        $lines = '';
        foreach ($trace as $type => $msg) {
            $lines .= $this->console($type, $msg);
        }
        $js = <<<JS

<script type='text/javascript'>
{$lines}
</script>
JS;
        return $js;
    }
kai_12
Foutlook 哥们,你这是PHP吧?
大约 2 年之前 回复
  ss = new ServerSocket(8011);
            while(true){
                System.out.println("服务已经开启");
                Socket socket = ss.accept();
                st = new ServerThread(socket);//创建线程对象
                ExecutorService es = Executors.newCachedThreadPool();
                es.execute(st); //开启线程
                es.shutdown();
                socket.close();//关闭socket
            }
                    这段代码有明显的问题,你在不断的开不断的关socket服务器,你的accpt放在哪里,close放在哪里你应该去百度看看案例。
                    或者你在close下面加个输出试试看你的控制台
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
请求大佬支援!!!报错java.io.NotSerializableException
![图片说明](https://img-ask.csdn.net/upload/201911/27/1574838012_281817.jpg) ``` package com.bjsxt.singleton; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class Client2 implements Serializable{ private static final long serialVersionUID = 1L; public static void main(String[] args) throws Exception { SingletonDemo6 s1 = SingletonDemo6.getInstance(); SingletonDemo6 s2 = SingletonDemo6.getInstance(); System.out.println(s1); System.out.println(s2); //通过反序列化的方式构造多个对象 FileOutputStream fos = new FileOutputStream("d:/a.txt"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(s1);//序列化 oos.close(); fos.close(); ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d:/a.txt")); SingletonDemo6 s3 = (SingletonDemo6) ois.readObject(); System.out.println(s3); ois.close(); } } ```
请教一下高手,ObjectOutputStream 类的 writeObject 方法
我在学习网络编程的过程中发现,ObjectOutputStream 类的 writeObject 方法,如果每次都重新 new 一个对象写入,则没有问题; 但如果是最初 new 一个对象,而在每次写入前,改写对象的属性,然后再写入,则每次接收方收到的都是第一次的内容。 本人初学 java ,研究了半天也没搞懂,所以特来向高手请教,示例代码如下: /** 对象类 MsgData.java **/ import java.io.Serializable; public class MsgData implements Serializable { private String from; private String to; private String msg; public String getFrom() { return from; } public void setFrom(String from) { this.from = from; } public String getTo() { return to; } public void setTo(String to) { this.to = to; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public String toString() { return from + " 对你说:" + msg; } } /** 发送方(客户端)ClientTest.java **/ import java.io.IOException; import java.io.ObjectOutputStream; import java.net.Socket; import java.util.Scanner; public class ClientTest { public static void main(String[] args) { try { Socket s = new Socket("localhost", 9002); ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream()); MsgData iMsg = new MsgData(); iMsg.setFrom("A"); iMsg.setTo("server"); while (true) { Scanner in = new Scanner(System.in); // 如果每次在这里重新 new 对象就是正确的 // MsgData iMsg = new MsgData(); // iMsg.setFrom("A"); // iMsg.setTo("server"); String msg = in.nextLine(); iMsg.setMsg(msg); out.writeObject(iMsg); out.flush(); } } catch (IOException e) { e.printStackTrace(); } } } /** 接收方(服务端)ServerTest.java **/ import java.io.IOException; import java.io.ObjectInputStream; import java.net.ServerSocket; import java.net.Socket; public class ServerTest { public static void main(String[] args) { try { ServerSocket server = new ServerSocket(9002); Socket s = server.accept(); ObjectInputStream in = new ObjectInputStream(s.getInputStream()); while (true) { MsgData iMsg = (MsgData)in.readObject(); System.out.println(iMsg); } } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } 如果使用上面的代码,先运行Server端,再运行Client端,然后在Client端输入123,回车,再输入456,则Server端会显示: A 对你说:123 A 对你说:123 如果按我代码中注释部分所述,把创建对象放到循环里面,再次运行,同样的输入,则Server端会正常显示: A 对你说:123 A 对你说:456 我无法确认究竟是 writeObject 方法的问题,还是 readObject 方法的问题,所以特求助高手,非常感谢!
请教一下ObjectOutputStream和ByteArrayOutputStream有什么不同?
ByteArrayOutputStream是把对象序列化成字节流,或者字节数组的形式对吗?可是我用ObjectOutputStream对对象进行序列化的时候,发现最后写成的文件也是二进制文件,那这两个有什么不同呢?还有,ByteArrayOutputSteam可以不依赖于ObjectOutputStream就使用吗?
Android7.0的不能发送数据的问题?
Android串口调试的手机是Android5.1,所有功能完好,打包成apk之后,在Android7.0的真机上运行时,没办法发送byte数据,但是文件确实可以发送的,我不是很明白,发送文件用MD5码转换, objectoutputstream写入,发送字符时,启动线程,也是用 object发送,也用outputstream试过,就是没用,我以为是打包的时候出错了,可是我自己手机用打包文件也是好的啊?很奇怪??????
在map转byte流上遇到报错,求救
我在将map转成文件流的时候遇到报错 ByteArrayOutputStream mem_out = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(mem_out); out.writeObject(hashMap); out.close(); mem_out.close(); byte[] bytes = mem_out.toByteArray();//这里会报错 return bytes; ``` ``` 似乎是内存溢出 我这个map键不多,但值很多,是解析一张图片的. 本人初学者,求老码们帮帮忙
get请求,参数拼接,时间字符串拼接报错,然后大佬们说的我好想不太清楚咋弄,就新添了请求方法,和调用
java.io.IOException: Server returned HTTP response code: 400 for URL: http://api.baidu.com/getsyncusers?code=02&date=2019-10-10 10:16:00.0 at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1894) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492) at com.dunan.zzjg.util.ApiGateToken.getResponseContext(ApiGateToken.java:115) at com.dunan.zzjg.service.impl.SysUserServiceImpl.setSyncUsers(SysUserServiceImpl.java:82) at com.dunan.zzjg.controller.DAapiController.userDate(DAapiController.java:44) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1039) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897) at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:90) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:66) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215) at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:117) at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:106) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:836) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1747) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) /** * 根据请求地址及请求参数,获取服务器的相应信息 * * @param requestURL 请求地址 * @param requestParam 请求参数 * @param requestMethod "POST" or "GET" * @return */ public static String getResponseContext(String requestURL, String requestParam, String requestMethod,String token) { StringBuffer responseContext = new StringBuffer(); try { URL url = new URL(requestURL); // 此处的urlConnection对象实际上是根据URL的 URLConnection urlConn = url.openConnection(); urlConn.setConnectTimeout(30000); urlConn.setReadTimeout(30000); // 请求协议(此处是http)生成的URLConnection类 的子类HttpURLConnection,故此处最好将其转化 // 为HttpURLConnection类型的对象,以便用到 HttpURLConnection更多的API.如下: HttpURLConnection httpUrlConnection = (HttpURLConnection) urlConn; // 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在 // http正文内,因此需要设为true, 默认情况下是false; httpUrlConnection.setDoOutput(true); // 设置是否从httpUrlConnection读入,默认情况下是true; httpUrlConnection.setDoInput(true); // Post 请求不能使用缓存 httpUrlConnection.setUseCaches(false); // 设定传送的内容类型是可序列化的java对象 // (如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛java.io.EOFException) httpUrlConnection.setRequestProperty("Content-type","application/json"); // 设置 HttpURLConnection的字符编码 httpUrlConnection.setRequestProperty("Accept-Charset", "UTF-8"); if(StringUtils.isNotBlank(token)){ httpUrlConnection.setRequestProperty("Access-Token", token); } // 设定请求的方法为"POST",默认是GET httpUrlConnection.setRequestMethod(requestMethod); // 连接,从上述第2条中url.openConnection()至此的配置必须要在connect之前完成, // // 此处getOutputStream会隐含的进行connect(即:如同调用上面的connect()方法, // // 所以在开发中不调用上述的connect()也可以)。 if("POST".equals(requestMethod)){ OutputStream outStrm = httpUrlConnection.getOutputStream(); outStrm.write(requestParam.getBytes("UTF-8")); // // 刷新对象输出流,将任何字节都写入潜在的流中(些处为ObjectOutputStream) outStrm.flush(); // 关闭流对象。此时,不能再向对象输出流写入任何数据,先前写入的数据存在于内存缓冲区中, // 在调用下边的getInputStream()函数时才把准备好的http请求正式发送到服务器 outStrm.close(); } // 调用HttpURLConnection连接对象的getInputStream()函数, // 将内存缓冲区中封装好的完整的HTTP请求电文发送到服务端。 InputStream inStrm = httpUrlConnection.getInputStream(); // 读取文件流程 BufferedReader rd = new BufferedReader( new InputStreamReader(inStrm,"UTF-8")); // 采取行的方式进行读取 String tempLine = rd.readLine(); // 循环获取每一行数据 while (tempLine != null) { responseContext.append(tempLine); tempLine = rd.readLine(); } rd.close(); inStrm.close(); httpUrlConnection.disconnect(); httpUrlConnection = null; urlConn = null; url = null; } catch (Exception e) { e.printStackTrace(); } return responseContext.toString(); } /*获取上次更新的时间*/ TurnoverTime lastTime = timeMapper.selectTime(); String lastUpdateTime = lastTime.getLastUpdateTime(); System.out.println(lastUpdateTime); String url = "http://api.baidu.com/getsyncusers"; String param = "?code="+"02"+"&date="+lastUpdateTime; String requestMethod = "GET"; String token = ApiGateToken.getToken(); String responseContext = ApiGateToken.getResponseContext(url+param, param, requestMethod, token);
java序列化实例类,在反序列化后,时间会变成null
问题RT ![图片说明](https://img-ask.csdn.net/upload/201912/31/1577759957_707429.jpg) ![图片说明](https://img-ask.csdn.net/upload/201912/31/1577759976_357376.jpg) ``` /** * 序列化 list 集合 * * @param list * @return */ public static byte[] serializeList(List<?> list) { if (list == null || list.size() == 0) { return null; } ObjectOutputStream oos = null; ByteArrayOutputStream baos = null; byte[] bytes = null; try { baos = new ByteArrayOutputStream(); oos = new ObjectOutputStream(baos); for (Object obj : list) { oos.writeObject(obj); } bytes = baos.toByteArray(); } catch (Exception e) { e.printStackTrace(); } finally { close(oos); close(baos); } return bytes; } ``` ``` //反序列化代码 if (bytes == null) { return null; } List<Object> list = new ArrayList<Object>(); ByteArrayInputStream bais = null; ObjectInputStream ois = null; try { // 反序列化 bais = new ByteArrayInputStream(bytes); ois = new ObjectInputStream(bais); while (bais.available() > 0) { Object obj = (Object) ois.readObject(); if (obj == null) { break; } list.add(obj); } } catch (Exception e) { e.printStackTrace(); } finally { close(bais); close(ois); } return list; ```
Java中从文件中读取ArrayList报错
java.io.EOFException at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source) at java.io.ObjectInputStream.readObject0(Unknown Source) at java.io.ObjectInputStream.readObject(Unknown Source) 代码 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; public class Data { private File file=new File("e:"+File.separator+"message.txt"); private ObjectInputStream ois; private ObjectOutputStream oos; public ArrayList<Message> read() throws FileNotFoundException, IOException{ ArrayList<Message> list=new ArrayList<Message>(); ois=new ObjectInputStream(new FileInputStream(file)); try { list=(ArrayList<Message>) ois.readObject();//报错的位置 ois.close(); } catch (Exception e) { e.printStackTrace(); } return list; } public void write(ArrayList<Message> list){ try { oos=new ObjectOutputStream(new FileOutputStream(file)); oos.writeObject(list); oos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
代码能运行,但添加信息时显示错误,不知道哪错了,求大佬帮忙改正正确的?
import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; class Note implements Serializable{ public String name; public String address; public String telephone; public Note(){} } public class AddressListSystem extends JFrame{ JLabel title=new JLabel("我的通讯录管理"); JLabel name=new JLabel("姓名"); JLabel address=new JLabel("地址"); JLabel telephone=new JLabel("电话"); JTextField jtxtname=new JTextField(); JTextField jtxtaddr=new JTextField(); JTextField jtxttel=new JTextField(); Font font=new Font("TimersRoman",Font.BOLD,30); JButton jbtadd=new JButton("添加"); JButton jbtfind=new JButton("查找"); JButton jbtclear=new JButton("清空"); JButton jbtexit=new JButton("退出"); ArrayList al=new ArrayList(); AddressListSystem(String s){ super(s); Container cp=getContentPane(); cp.setBackground(Color.PINK); cp.setLayout(null); title.setFont(font); title.setForeground(Color.BLUE); title.setBounds(130,20,300,60); name.setBounds(50,150,75,25); address.setBounds(50,220,75,25); telephone.setBounds(50,310,75,25); jtxtname.setBounds(150,150,100,25); jtxtaddr.setBounds(150,220,100,25); jtxttel.setBounds(150,310,200,25); jbtadd.setBounds(50,400,75,25); jbtfind.setBounds(150,400,75,25); jbtclear.setBounds(250,400,75,25); jbtexit.setBounds(350,400,75,25); jbtadd.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(jtxtname.getText().equalsIgnoreCase("")){ JOptionPane.showMessageDialog(null,"无法添加名字为空的记录","错误提示",JOptionPane.INFORMATION_MESSAGE); jtxtname.setText(""); jtxtaddr.setText(""); jtxttel.setText(""); return; } Note note=new Note(); note.name=jtxtname.getText(); note.address=jtxtaddr.getText(); note.telephone=jtxttel.getText(); try{ ObjectInputStream in=new ObjectInputStream(new FileInputStream("note.dat")); al=(ArrayList)in.readObject(); in.close(); }catch(Exception ex){ System.out.println( "添加信息时文件输入有误哦"); } try{ ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("note.dat",true)); Note temp=new Note(); int i; for(i=0;i<al.size();i++){ temp=(Note)al.get(i); if(temp.name.equalsIgnoreCase(jtxtname.getText())) break; } if(!al.isEmpty()&&i!=al.size()){ JOptionPane.showMessageDialog(null,"已经存在此记录","错误提示",JOptionPane.INFORMATION_MESSAGE); } else{ al.add(note); out.writeObject(al); } out.close(); }catch(Exception ex){ System.out.println("添加信息时文件输出有误哦"); } jtxtname.setText(""); jtxtaddr.setText(""); jtxttel.setText(""); } }); jbtfind.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ try{ ObjectInputStream in=new ObjectInputStream(new FileInputStream("note.dat")); al=(ArrayList)in.readObject(); in.close(); }catch(Exception ex){ System.out.println("查询时文件打开有误哦"); } Note temp=new Note(); int i; for(i=0;i<al.size();i++){ temp=(Note)al.get(i); if(temp.name.equalsIgnoreCase(jtxtname.getText())) break; } if(!al.isEmpty()&&i!=al.size()){ jtxtaddr.setText(temp.address); jtxttel.setText(temp.telephone); } else{ jtxtname.setText(""); jtxtaddr.setText(""); jtxttel.setText(""); JOptionPane.showMessageDialog(null,"无此记录哦","温馨提示",JOptionPane.INFORMATION_MESSAGE); } } }); jbtclear.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ try{ ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("note.dat")); al.clear(); out.close(); }catch(Exception ex){ System.out.println("清除文件时有误哦"); } jtxtname.setText(""); jtxtaddr.setText(""); jtxttel.setText(""); } }); jbtexit.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ try{ System.exit(1); }catch(Exception ex){ System.out.println("退出系统时出错啦"); } } }); cp.add(title); cp.add(name); cp.add(address); cp.add(telephone); cp.add(jtxtname); cp.add(jtxtaddr); cp.add(jtxttel); cp.add(jbtadd); cp.add(jbtfind); cp.add(jbtclear); cp.add(jbtexit); } public static void main(String[] args) { AddressListSystem als=new AddressListSystem("我的通讯录管理系统"); als.addWindowListener(new WindowAdapter(){ @Override public void windowClosing(WindowEvent e){ System.exit(0); } }); als.setSize(500,550); als.setVisible(true); } }
Activiti 保存ACT_HI_VARINST报错没有序列化
Caused by: java.io.NotSerializableException: org.activiti.engine.impl.variable.IntegerType at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) at com.mysql.jdbc.PreparedStatement.setSerializableObject(PreparedStatement.java:3876)
配置完liberty却无法正常运行,报错FrameworkEvent ERROR Bundle是什么意思?
请问各位大神,我把公司里用于测试的代码通过svn导入本地IDEA后,liberty进行相关的配置后,启动时,服务器报错,没有看懂意思,请大神们帮我看看哪里出了问题。 ``` D:\Liberty-test\wlp\bin\server.bat run server1 [2019-07-29 04:27:18,729] Artifact jb2q-00-demo-web:war exploded: Waiting for server connection to start artifact deployment... Detected server http port: 8080 OpenJDK 64-Bit Server VM warning: Ignoring option MaxPermSize; support was removed in 8.0 正在 OpenJDK 64-Bit Server VM V11.0.3+12-b304.10 (zh_CN) 上启动 server1 (WebSphere Application Server 16.0.0.2/wlp-1.0.13.cl160220160526-2258) TRAS0038E: 系统未能删除文件 D:\Liberty-test\wlp\usr\servers\server1\logs\messages.log [AUDIT ] CWWKE0001I: 已启动服务器 server1。 WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by com.ibm.ws.logging.internal.impl.IntrospectionLevelMember$2 (file:/D:/Liberty-test/wlp/lib/com.ibm.ws.logging_1.0.13.jar) to field java.util.HashMap.serialVersionUID WARNING: Please consider reporting this to the maintainers of com.ibm.ws.logging.internal.impl.IntrospectionLevelMember$2 WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release [ERROR ] CWWKE0701E: FrameworkEvent ERROR Bundle:com.ibm.ws.config(id=8) org.osgi.framework.BundleException: Exception in com.ibm.ws.config.internal.WSConfigActivator.start() of bundle com.ibm.ws.config. at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:795) at [internal classes] Caused by: java.lang.NoClassDefFoundError: jdk/internal/reflect/SerializationConstructorAccessorImpl at java.base/jdk.internal.misc.Unsafe.defineClass0(Native Method) at java.base/jdk.internal.misc.Unsafe.defineClass(Unsafe.java:1192) at java.base/jdk.internal.reflect.ClassDefiner.defineClass(ClassDefiner.java:63) at java.base/jdk.internal.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:400) at java.base/jdk.internal.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:394) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.base/jdk.internal.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:393) at java.base/jdk.internal.reflect.MethodAccessorGenerator.generateSerializationConstructor(MethodAccessorGenerator.java:112) at java.base/jdk.internal.reflect.ReflectionFactory.generateConstructor(ReflectionFactory.java:514) at java.base/jdk.internal.reflect.ReflectionFactory.newConstructorForSerialization(ReflectionFactory.java:506) at java.base/java.io.ObjectStreamClass.getSerializableConstructor(ObjectStreamClass.java:1516) at java.base/java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:509) at java.base/java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:484) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.base/java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:484) at java.base/java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:381) at java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1135) at java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:349) at com.ibm.ws.config.admin.internal.ConfigurationStore.serializeConfigurationData(ConfigurationStore.java:213) ... 1 more Caused by: java.lang.ClassNotFoundException: jdk.internal.reflect.SerializationConstructorAccessorImpl cannot be found by com.ibm.ws.config_1.0.13.cl160220160526-2258 ... 24 more Event:org.osgi.framework.FrameworkEvent[source=com.ibm.ws.config_1.0.13.cl160220160526-2258 [8]] D:\Liberty-test\wlp\bin\server.bat stop server1 正在停止服务器 server1。 [AUDIT ] CWWKE0055I: 已在 2019年7月29日星期一 的 下午4:28 时请求关闭服务器。服务器 server1 正在关闭。 [AUDIT ] CWWKE0036I: 服务器 server1 已在 50.385 秒 之后停止。 服务器 server1 已停止。 ```
在httpclient中使用Serializable接口报错
public static void main(String[] args) throws IOException, ClassNotFoundException { String url = "http://localhost:8080/RmiJetty/test"; Scanner sc1 = new Scanner(System.in); String queryString1 = "num1 = 1"; String queryString2 = "num2 = 1"; String inputObj = sc1.next(); Serializable s = getObjFromServer(url, queryString1,queryString2, inputObj); System.out.println(s.toString()); } /** * @param url * @param queryString 类似a=b&c=d 形式的参数 * * @param inputObj 发送到服务器的对象。 * * @return 服务器返回到客户端的对象。 * @throws IOException */ public static Serializable getObjFromServer(String url, String queryString1,String queryString2,Serializable inputObj) throws IOException { HttpClient client = new HttpClient(); PostMethod post = new PostMethod(url); post.setQueryString(queryString1); post.setQueryString(queryString2); post.setRequestHeader("Content-Type", "application/octet-stream"); java.io.ByteArrayOutputStream bOut = new java.io.ByteArrayOutputStream(1024); java.io.ByteArrayInputStream bInput = null; java.io.ObjectOutputStream out = null; Serializable returnObj = null; try { out = new java.io.ObjectOutputStream(bOut); out.writeObject(inputObj); out.flush(); out.close(); out = null; bInput = new java.io.ByteArrayInputStream(bOut.toByteArray()); RequestEntity re = new InputStreamRequestEntity(bInput); post.setRequestEntity(re); client.executeMethod(post); java.io.InputStream in = post.getResponseBodyAsStream(); java.io.ObjectInputStream oInput = new java.io.ObjectInputStream(in); returnObj = (Serializable) oInput.readObject(); oInput.close(); oInput = null; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (out != null) { out.close(); out = null; } if (bInput != null) { bInput.close(); bInput = null; } //释放连接 post.releaseConnection(); } return returnObj; } 下面是servlet: public class servlet1 extends HttpServlet{ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String strnum1 = request.getParameter("num1"); String strnum2 = request.getParameter("num2"); //String strnum3 = request.getParameter("inputObj"); java.io.ObjectInputStream oi = null; java.io.ObjectOutputStream ot = null; String url="rmi://127.0.0.1/Hello"; //hello表示为一个token,类似秘钥 try { NumServer server = (NumServer)Naming.lookup(url); oi = new java.io.ObjectInputStream(request.getInputStream()); Object o = oi.readObject(); oi.close(); oi = null; //int result = Integer.parseInt(strnum1) + Integer.parseInt(o.toString()); int a = Integer.parseInt(strnum1); int b = Integer.parseInt(strnum2); int result = server.num(a,b,o.toString()); ot = new java.io.ObjectOutputStream(response.getOutputStream()); ot.writeObject(result); ot.flush(); ot.close(); ot = null; PrintWriter pw = response.getWriter(); pw.println(result); }catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NotBoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { if (oi != null) { oi.close(); oi = null; } if (ot != null) { ot.close(); ot = null; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } 这是报的错: java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2281) at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2750) at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780) at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280) at RmiClient.HttpClientTest1.getObjFromServer(HttpClientTest1.java:79) at RmiClient.HttpClientTest1.main(HttpClientTest1.java:31) Exception in thread "main" java.lang.NullPointerException at RmiClient.HttpClientTest1.main(HttpClientTest1.java:33) 求大神帮忙啊
java 对象输出流单独运行写对象对象会被写出来 但是也会报错 单独问我行读对像直接报错
package com.vince; import java.io.Serializable; public class Cat implements Serializable { private String name; private int age; private transient String color; public Cat(){ } public Cat(String name,int age){ this.name=name; this.age=age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Cat [name=" + name + ", age=" + age + "]"; } } 这是这个Cat类 package com.vince; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; public class ObjectStreamDemo { public static void objectIn(){ try { InputStream in = new FileInputStream("d:\\object.abc"); BufferedInputStream bs =new BufferedInputStream(in); ObjectInputStream ois = new ObjectInputStream(bs); Cat cat = (Cat) ois.readObject(); System.out.println(cat); ois.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void objectOut(){ Cat cat =new Cat("花花",3); try { OutputStream out =new FileOutputStream("f:\\huahua.obj"); ObjectOutputStream oos=new ObjectOutputStream(out); oos.writeObject(cat); oos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { objectOut(); objectIn(); } }这是我写的对象输入输出流运行起来为什么会报错
mina连接服务器报错,发现流只清空了缓存,并没有关闭,这个合适吗
如下,米娜在断链后再连接服务端时报错,是因为out没关闭的原因吗 异常:Caused by: java.lang.OutOfMemoryError: Java heap space at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2436) at java.lang.Class.getDeclaredMethod(Class.java:1937) at java.io.ObjectStreamClass.getPrivateMethod(ObjectStreamClass.java:1377) at java.io.ObjectStreamClass.access$1700(ObjectStreamClass.java:50) at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:442) at java.security.AccessController.doPrivileged(Native Method) at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:411) at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:308) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1114) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330) at org.apache.mina.core.buffer.AbstractIoBuffer.putObject(AbstractIoBuffer.java:2251) at org.apache.mina.filter.codec.serialization.ObjectSerializationEncoder.encode(ObjectSerializationEncoder.java:80) at org.apache.mina.filter.codec.ProtocolCodecFilter.filterWrite(ProtocolCodecFilter.java:322) at org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:509) at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1400(DefaultIoFilterChain.java:46) at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:808) at org.apache.mina.core.filterchain.IoFilterAdapter.filterWrite(IoFilterAdapter.java:135) at org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:509) at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1400(DefaultIoFilterChain.java:46) at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:808) at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.filterWrite(DefaultIoFilterChain.java:734) at org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:509) at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireFilterWrite(DefaultIoFilterChain.java:501) 源码: public IoBuffer putObject(Object o) { int oldPos = position(); skip(4); // Make a room for the length field. try { ObjectOutputStream out = new ObjectOutputStream(asOutputStream()) { @Override protected void writeClassDescriptor(ObjectStreamClass desc) throws IOException { try { Class<?> clz = Class.forName(desc.getName()); if (!Serializable.class.isAssignableFrom(clz)) { // NON-Serializable class write(0); super.writeClassDescriptor(desc); } else { // Serializable class write(1); writeUTF(desc.getName()); } } catch (ClassNotFoundException ex) { // Primitive types write(0); super.writeClassDescriptor(desc); } } }; out.writeObject(o); out.flush(); } catch (IOException e) { throw new BufferDataException(e); } // Fill the length field int newPos = position(); position(oldPos); putInt(newPos - oldPos - 4); position(newPos); return this; }
java读取文件问题,加上目录写入磁盘失败!
``` public static void saveData(CustomLinkedList linkedList) throws FileNotFoundException, IOException { Calendar calendar = Calendar.getInstance(); String year = String.valueOf(calendar.get(Calendar.YEAR)); String month = String.valueOf(calendar.get(Calendar.MONTH) + 1); String day = String.valueOf(calendar.get(Calendar.DAY_OF_MONTH)); // outFile = new File("/data/", year + "-" + month + "-" + day + ".txt"); // if (outFile.exists()) { // outFile.delete(); // } objectOut = new ObjectOutputStream(new FileOutputStream("/data/"+year + "-" + month + "-" + day + ".txt")); objectOut.writeObject(linkedList); } ``` 如上,加上/data/没有报错,但是执行后磁盘没有文件。 但是去掉/data/后,会在项目根目录下创建相应文件。 求解?
安卓的ObjectOutputStream和ObjectInputStream问题。。。。
``` private void savalist() { try { FileOutputStream fos = this.openFileOutput("oauth_1.out",Context.MODE_WORLD_READABLE); ObjectOutputStream oos = new ObjectOutputStream(fos); for (int i = 0; i < mvp.getlist().size(); i++) { oos.writeObject(mvp.getlist().get(i)); } oos.close(); fos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private List<ImageView> loadlist() { List<ImageView> newlist=new ArrayList<ImageView>(); FileInputStream fis; try { fis = this.openFileInput("oauth_1.out"); ObjectInputStream ois = new ObjectInputStream(fis); for (int i = 0; i <5; i++) { ImageView nm=(ImageView) ois.readObject(); newlist.add(nm); } fis.close(); ois.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return newlist; } ``` 我想实现的是把一个list<imageview>里面的imageview的信息(之前设置了layoutparam,点击事件)都保存到文件里, 然后在程序下一次运行的时候读取list里的imageview,但是读不出来啊。。。。 读出来显示的是黑屏。。。 求大神们帮忙看下
序列化单例和类型安全的枚举
在看书,JAVA核心技术卷二里的一节内容 有下面一段枚举类型: ``` public class Orientation { public static final Orientation HORIZONTAL = new Orientation(1); public static final Orientation VERTICAL = Orientation(2); private int value; private Orientation(int v) { value = v; } } Orientation original = Orientation.HORIZONTAL; ObjectOutputStream out = new ObjectOutputStream(,,,); out.write(original); out.close(); ObjectInputStream in = new ObjectInputStream(...); Orientation saved = (Orientation) in.read(); ``` 这里说序列化创造了新的对象,saved的值就是Orientation类型一个全新的对象,那么为什么不可将读入流in中的Orientatio读入,等号后还有和意义,还是说读出流out中或者读入流in中根本就没有这个对象。 初学者,谢谢各位传道解惑
有个进程启了没一会就自己挂了,以下是weblogic的报错,最后重启weblogic就好了
weblogic.utils.AssertionError: ***** ASSERTION FAILED *****[ Failed to generate stub for weblogic.jdbc.rmi.internal.ResultSetImpl_weblogic_jdbc_wrapper_ResultSet_oracle_jdbc_driver_OracleResultSetImpl@7ffd0d21 ]. java.lang.Throwable: ***** ASSERTION FAILED *****[ Failed to generate stub for weblogic.jdbc.rmi.internal.ResultSetImpl_weblogic_jdbc_wrapper_ResultSet_oracle_jdbc_driver_OracleResultSetImpl@7ffd0d21 ] at weblogic.rmi.extensions.StubFactory.getStub(StubFactory.java:70) at weblogic.jdbc.rmi.internal.ResultSetImpl.interopWriteReplace(ResultSetImpl.java:87) at weblogic.rmi.utils.io.InteropObjectReplacer.replaceObject(InteropObjectReplacer.java:38) at weblogic.common.internal.ChunkedObjectOutputStream.replaceObject(ChunkedObjectOutputStream.java:54) at weblogic.common.internal.ChunkedObjectOutputStream$NestedObjectOutputStream.replaceObject(ChunkedObjectOutputStream.java:249) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1020) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278) at weblogic.common.internal.ChunkedObjectOutputStream.writeObject(ChunkedObjectOutputStream.java:120) at weblogic.rjvm.MsgAbbrevOutputStream.writeObject(MsgAbbrevOutputStream.java:93) at weblogic.jdbc.rmi.internal.PreparedStatementImpl_weblogic_jdbc_wrapper_PreparedStatement_oracle_jdbc_driver_T4CPreparedStatement_WLSkel.invoke(Unknown Source) at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:491) at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:434) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:147) at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:429) at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:35) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183) > ####<2017-6-15 上午12时41分03秒 CST> <Warning> <RMI> <iomapp1> <myserver> <ExecuteThread: '15' for queue: 'weblogic.kernel.Default'> <<WLS Kernel>> <> <BEA-080004> <An error was thrown by rmi server: weblogic.jdbc.rmi.internal.PreparedStatementImpl_weblogic_jdbc_wrapper_PreparedStatement_oracle_jdbc_driver_T4CPreparedStatement.executeQuery() weblogic.utils.AssertionError: ***** ASSERTION FAILED *****[ Failed to generate stub for weblogic.jdbc.rmi.internal.ResultSetImpl_weblogic_jdbc_wrapper_ResultSet_oracle_jdbc_driver_OracleResultSetImpl@7ffd0d25 ]. java.lang.Throwable: ***** ASSERTION FAILED *****[ Failed to generate stub for weblogic.jdbc.rmi.internal.ResultSetImpl_weblogic_jdbc_wrapper_ResultSet_oracle_jdbc_driver_OracleResultSetImpl@7ffd0d25 ] at weblogic.rmi.extensions.StubFactory.getStub(StubFactory.java:70) at weblogic.jdbc.rmi.internal.ResultSetImpl.interopWriteReplace(ResultSetImpl.java:87) at weblogic.rmi.utils.io.InteropObjectReplacer.replaceObject(InteropObjectReplacer.java:38) at weblogic.common.internal.ChunkedObjectOutputStream.replaceObject(ChunkedObjectOutputStream.java:54) at weblogic.common.internal.ChunkedObjectOutputStream$NestedObjectOutputStream.replaceObject(ChunkedObjectOutputStream.java:249) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1020) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278) at weblogic.common.internal.ChunkedObjectOutputStream.writeObject(ChunkedObjectOutputStream.java:120) at weblogic.rjvm.MsgAbbrevOutputStream.writeObject(MsgAbbrevOutputStream.java:93) at weblogic.jdbc.rmi.internal.PreparedStatementImpl_weblogic_jdbc_wrapper_PreparedStatement_oracle_jdbc_driver_T4CPreparedStatement_WLSkel.invoke(Unknown Source) at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:491) at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:434) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:147) at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:429) at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:35) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183) > ####<2017-6-15 上午12时41分03秒 CST> <Warning> <RMI> <iomapp1> <myserver> <ExecuteThread: '19' for queue: 'weblogic.kernel.Default'> <<WLS Kernel>> <> <BEA-080004> <An error was thrown by rmi server: weblogic.jdbc.rmi.internal.PreparedStatementImpl_weblogic_jdbc_wrapper_PreparedStatement_oracle_jdbc_driver_T4CPreparedStatement.executeQuery() weblogic.utils.AssertionError: ***** ASSERTION FAILED *****[ Failed to generate stub for weblogic.jdbc.rmi.internal.ResultSetImpl_weblogic_jdbc_wrapper_ResultSet_oracle_jdbc_driver_OracleResultSetImpl@7ffd0d23 ]. java.lang.Throwable: ***** ASSERTION FAILED *****[ Failed to generate stub for weblogic.jdbc.rmi.internal.ResultSetImpl_weblogic_jdbc_wrapper_ResultSet_oracle_jdbc_driver_OracleResultSetImpl@7ffd0d23 ] at weblogic.rmi.extensions.StubFactory.getStub(StubFactory.java:70) at weblogic.jdbc.rmi.internal.ResultSetImpl.interopWriteReplace(ResultSetImpl.java:87) at weblogic.rmi.utils.io.InteropObjectReplacer.replaceObject(InteropObjectReplacer.java:38) at weblogic.common.internal.ChunkedObjectOutputStream.replaceObject(ChunkedObjectOutputStream.java:54) at weblogic.common.internal.ChunkedObjectOutputStream$NestedObjectOutputStream.replaceObject(ChunkedObjectOutputStream.java:249) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1020) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278) at weblogic.common.internal.ChunkedObjectOutputStream.writeObject(ChunkedObjectOutputStream.java:120) at weblogic.rjvm.MsgAbbrevOutputStream.writeObject(MsgAbbrevOutputStream.java:93) at weblogic.jdbc.rmi.internal.PreparedStatementImpl_weblogic_jdbc_wrapper_PreparedStatement_oracle_jdbc_driver_T4CPreparedStatement_WLSkel.invoke(Unknown Source) at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:491) at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:434) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:147) at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:429) at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:35) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183) > ####<2017-6-15 上午01时50分52秒 CST> <Notice> <WebLogicServer> <iomapp1> <myserver> <ExecuteThread: '2' for queue: 'weblogic.admin.RMI'> <<WLS Kernel>> <> <BEA-000365> <Server state changed to SUSPENDING> ####<2017-6-15 上午01时50分52秒 CST> <Alert> <WebLogicServer> <iomapp1> <myserver> <ExecuteThread: '2' for queue: 'weblogic.admin.RMI'> <<WLS Kernel>> <> <BEA-000228> <The disabling of server logins has been requested by <WLS Kernel>> ####<2017-6-15 上午01时50分52秒 CST> <Alert> <WebLogicServer> <iomapp1> <myserver> <ExecuteThread: '2' for queue: 'weblogic.admin.RMI'> <<WLS Kernel>> <> <BEA-000229> <Server logins have been disabled.> ####<2017-6-15 上午01时52分52秒 CST> <Notice> <WebLogicServer> <iomapp1> <myserver> <Thread-9> <<WLS Kernel>> <> <BEA-000378> <Server failed to shutdown within the configured timeout of 120 seconds. The server process will exit now.> ####<2017-6-15 上午01时53分09秒 CST> <Notice> <Security> <iomapp1> <myserver> <main> <<WLS Kernel>> <> <BEA-090082> <Security initializing using security realm myrealm.> ####<2017-6-15 上午01时53分09秒 CST> <Notice> <WebLogicServer> <iomapp1> <myserver> <main> <<WLS Kernel>> <> <BEA-000327> <Starting WebLogic Admin Server "myserver" for domain "testdomain"> ####<2017-6-15 上午01时53分13秒 CST> <Notice> <WebLogicServer> <iomapp1> <myserver> <main> <<WLS Kernel>> <> <BEA-000360> <Server started in RUNNING mode> ####<2017-6-15 上午01时53分13秒 CST> <Notice> <WebLogicServer> <iomapp1> <myserver> <ListenThread.Default> <<WLS Kernel>> <> <BEA-000355> <Thread "ListenThread.Default" listening on port 6001, ip address *.*>
objectinputstream readobject 为何只能读取第一次写入的值
public class TransEntity implements Serializable//传输信息实体封装类 { private static final long serialVersionUID = 1L; private String operaType;//用户操作类型;如发送文本消息,发送语音消息,发送音频消息 private String responseTags;//网络响应状态;如“登录成功”、“登录失败”、“注册成功”、“注册失败” private String requestTags;//网络请求标记;请求发送文本消息,语音消息,音频消息 private User sender;//发送方; private User receiver;//接收方; private ArrayList<HashMap<String,Object>> buddylist;//好友列表信息; private String time;//系统时间; private ArrayList<HashMap<String,String>> inputGeneralMsgList;//通用信息 private HashMap<String,Object> outGeneralMsgMap; private String path; public String getUserOperaType() { return operaType; } public void setUserOperaType(String operaType) { this.operaType = operaType; } public String getResponseTags() { return responseTags; } public String setResponseTags(String responseTags) { return this.responseTags = responseTags; } public void setRequestTags(String requestTags) { this.requestTags = requestTags; } public String getRequestTags() { return requestTags; } public User getSender() { return sender; } public void setSender(User sender) { this.sender = sender; } public User getReceiver() { return receiver; } public void setReceiver(User receiver) { this.receiver = receiver; } public ArrayList<HashMap<String,Object>> getList() { return buddylist; } public void setList(ArrayList<HashMap<String,Object>> buddylist) { this.buddylist = buddylist; } public String getImagePath() { return path; } public void setImagePath(String path) { this.path = path; } public void setGeneralMessagefrom(ArrayList<HashMap<String,String>> inputGeneralMsgList) { this.inputGeneralMsgList = inputGeneralMsgList; } public ArrayList<HashMap<String,String>> getGeneralMessagefrom() { return inputGeneralMsgList; } public void setGeneralMessageto(HashMap<String,Object> outGeneralMsgMap) { this.outGeneralMsgMap = outGeneralMsgMap; } public HashMap<String,Object> getGeneralMessageto() { return outGeneralMsgMap; } public void setSysTime(String time) { this.time = SysTime.getDateTime(); } public String getSysTime() { return time; } } 服务端核心代码 public class ServerThread extends Thread { private static ObjectInputStream ois = null; private static ObjectOutputStream oos = null; private ArrayList<HashMap<String,Object>> list = null; private ArrayList<HashMap<String,String>> outgeneralMsgList = null; private Socket socket = null; private TransEntity trans = null; private boolean FLAGS_IsFirstLogin = true; private boolean FLAGS_LoginSucess = false; private boolean FLAGS_RegisterSucess = false; private boolean FLAGS_OnLine = false; private User user = null; private User receiver = null; private Timer timer = new Timer(); public ServerThread(Socket socket) { this.socket = socket; try { oos = new ObjectOutputStream(socket.getOutputStream()); ois = new ObjectInputStream(socket.getInputStream()); } catch (IOException e) { e.printStackTrace(); } } public void run() { try { while(true) { if(socket.isClosed() == false && socket.isConnected() == true) { try { if(ois!=null) { trans = (TransEntity) ois.readObject(); } } catch(java.net.SocketException e) { System.out.println("客户端已经关闭。。。。。。。"); break; } catch(ClassNotFoundException e) { System.out.println("--------空指针异常---------"); } catch(java.io.EOFException e) { System.out.println("客户端已经关闭。。。。。。。"); } } if(trans!=null) { user = trans.getSender(); receiver = trans.getReceiver(); if(trans.getUserOperaType()!=null) { System.out.println("----------trans.getUserOperaType() :------------"+(trans.getUserOperaType())); if(FLAGS_IsFirstLogin == true&&(UserOperaType.LOGIN.equals(trans.getUserOperaType()))) { //首次登录,一般情形下的客户端发过来的登录操作请求做处理,非掉线后的自动登录; System.out.println("--------server---socket :------"+(socket)); FLAGS_LoginSucess = setLogin(); } if(FLAGS_LoginSucess) { FLAGS_IsFirstLogin = false; System.out.println("----------trans.getUserOperaType() :------------"+(trans.getUserOperaType())); ......为何此次只能输出第一次读入的数据 if(UserOperaType.SEND_MESSAGE.equals(trans.getUserOperaType())) { System.out.println("-------UserOperaType.SEND_MESSAGE ---------"); System.out.println(trans.getGeneralMessageto().get("outMsg").toString()); if(trans.getGeneralMessageto()!=null)//若getGeneralMessageto()返回值不为空,则可以向数据库写入信息; { System.out.println("-------服务端:---发送方 写入普通信息到数据库,如文字消息;-----------"); SysCtlVar.dbBasicOperation.writeGeneralMessage(trans);// 发送方 写入普通信息到数据库,如文字消息; //trans.setGeneralMessageto(null); } trans.setUserOperaType(null); } oos.writeObject(trans); oos.flush(); } } } } } catch (Exception e) { e.printStackTrace(); } finally { } } } 客户端核心代码 while(SysCtlVar.FlAGS_LoginSuccess) { // System.out.println("--------------while SysCtlVar.FlAGS_LoginSuccess -------------"); try { try { SysCtlVar.trans = (TransEntity)SysCtlVar.ois.readObject(); if(SysCtlVar.inputGeneralMsgList!=null) synchronized(SysCtlVar.inputGeneralMsgList) { SysCtlVar.inputGeneralMsgList = SysCtlVar.trans.getGeneralMessagefrom(); SysCtlVar.inputGeneralMsgList.notify(); } synchronized(SysCtlVar.outGeneralMsgMap) { try { System.out.println("------- SysCtlVar.outGeneralMsgMap.wait----------"); SysCtlVar.outGeneralMsgMap.wait(); //等待直到有输入的时候,才把消息发送出去 System.out.println("---------------客户端: 正在发送消息。。。。。。------------------"); System.out.println("------- SysCtlVar.outGeneralMsgMap:----------"+(SysCtlVar.outGeneralMsgMap.get("outMsg").toString())); SysCtlVar.trans.setUserOperaType(UserOperaType.SEND_MESSAGE); SysCtlVar.trans.setGeneralMessageto(SysCtlVar.outGeneralMsgMap); System.out.println("------- SysCtlVar.trans.getGeneralMessageto():----------"+(SysCtlVar.trans.getGeneralMessageto().get("outMsg").toString())); try { SysCtlVar.oos.writeObject(SysCtlVar.trans); SysCtlVar.oos.flush(); } catch (IOException e) { e.printStackTrace(); } } catch (InterruptedException e) { e.printStackTrace(); } } } catch (ClassNotFoundException e) { e.printStackTrace(); } } catch (StreamCorruptedException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } } } 客户端 数据输入部分 /** 调试过程中,你将看到客户端输入的消息为h(第一条消息),www(第二条消息),a(第三条消息) 但是服务端只有第二条消息的值; */ //------------------发送消息 ---------- //客户端当前会话任务中,选中的消息接收者; new Thread() { public void run() { synchronized(SysCtlVar.outGeneralMsgMap) { System.out.println("------- 客户端:正在输入要发送的消息----------"); SysCtlVar.outGeneralMsgMap.clear(); SysCtlVar.outGeneralMsgMap.put("outMsg",outMsg); SysCtlVar.outGeneralMsgMap.put("msgRecver", selectedAccount); SysCtlVar.outGeneralMsgMap.put("dateTime",SysTime.getDateTime().toString()); SysCtlVar.outGeneralMsgMap.notify(); //输入完毕,通知发送任务执行 } } }.start(); 调试信息(服务器端) 服务器已启动,正在监听1345端口 ----------trans.getUserOperaType() :------------0 --------server---socket :------Socket[addr=/127.0.0.1,port=38516,localport=1345] ------- list!=null : ---------true [qq]上线了! ----------qq---------- ----------trans.getUserOperaType() :------------0 ----------trans.getUserOperaType() :------------6 ----------trans.getUserOperaType() :------------6 -------------UserOperaType.GET_AVATARS------------6 我想从服务器获取头像 ----------trans.getUserOperaType() :------------7 ----------trans.getUserOperaType() :------------7 -------UserOperaType.SEND_MESSAGE --------- www -------服务端:---发送方 写入普通信息到数据库,如文字消息;----------- insert into chat(sender,recver,message,sendtime) values('qq','在水一方','www','2015-04-24 16:15:13') ----------trans.getUserOperaType() :------------7 ----------trans.getUserOperaType() :------------7 -------UserOperaType.SEND_MESSAGE --------- www -------服务端:---发送方 写入普通信息到数据库,如文字消息;----------- insert into chat(sender,recver,message,sendtime) values('qq','在水一方','www','2015-04-24 16:15:13') ----------trans.getUserOperaType() :------------7 ----------trans.getUserOperaType() :------------7 -------UserOperaType.SEND_MESSAGE --------- www -------服务端:---发送方 写入普通信息到数据库,如文字消息;----------- insert into chat(sender,recver,message,sendtime) values('qq','在水一方','www','2015-04-24 16:15:13') ----------trans.getUserOperaType() :------------7 ----------trans.getUserOperaType() :------------7 -------UserOperaType.SEND_MESSAGE --------- www -------服务端:---发送方 写入普通信息到数据库,如文字消息;----------- insert into chat(sender,recver,message,sendtime) values('qq','在水一方','www','2015-04-24 16:15:13') ---------------问题补充--------------- 单步调试,客户端的输出流正确发送了每一次的客户端输入数据(36分钟前)删除 对于单步调试追踪的结果:客户端每一次发送的trans(它是TransEntity的实例,被序列化的消息实体对象)都是正确的(即,与客户端输入值相同)。但是服务端有ObjectInputStream读入的trans(它也是TransEntity的实例,被序列化的消息实体对象)却没有改变始终是第一次的值
终于明白阿里百度这样的大公司,为什么面试经常拿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 installselenium -ihttps://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分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
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,并对一些常见的语法和知识点做个总结与回顾,一方面为了加深印象,方便后面查阅,一方面为了掌握好Android打下基础。
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# 压缩效率
立即提问