Java中如何将字符串转化为字节数组,并输出

Java中如何将字符串转化为字节数组,并输出,比如得到的输入为
:String str="我是好学生,My name is Studentdaiwei!"
转化为字节数组中,并输出
又如何将字节数组转化为比特数组并输出

3个回答

String str="我是好学生,My name is Studentdaiwei!"
byte[] data=str.getBytes();

这个涉及编码的问题,不同的编码输出的字节不同。用getBytes
http://blog.csdn.net/zheng0518/article/details/11532815

嗯,就像上面的回答,可以使用getBytes,参数中可以指定编码 getBytes(Charset charset)

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
图片文件进行Base64编码处理之后,如何下载?
将本地图片文件转化为字节数组字符串,并对其进行Base64编码处理之后, 如何在IE浏览器上实现对其进行下载功能?
eclipse import语句标记上有语法错误,删除这些标记;找不到问题在哪,求大佬解惑
![图片说明](https://img-ask.csdn.net/upload/201912/25/1577282527_104549.png) ``` package com.baidu.ai.aip.auth; import java.util.Base64.Encoder; import java.io.*; import java.util.Base64.Decoder; //import java.util.Base64.*; BASE64Encoder encoder = Base64.getEncoder(); //在代码中获取BASE64Decoder //BASE64Decoder decoder = Base64.getDecoder(); //在代码中获取BASE64Decoder BASE64Decoder decoder = Base64.getDecoder(); //import sun.misc.BASE64Encoder; /** * 图片转化base64后再UrlEncode结果 */ public class BaseImg64 { /** * 将一张本地图片转化成Base64字符串 */ public static String getImageStrFromPath(String imgPath) { InputStream in; byte[] data = null; // 读取图片字节数组 try { in = new FileInputStream(imgPath); data = new byte[in.available()]; in.read(data); in.close(); } catch (IOException e) { e.printStackTrace(); } // 对字节数组Base64编码 BASE64Encoder encoder = new BASE64Encoder(); // 返回Base64编码过再URLEncode的字节数组字符串 return URLEncoder.encode(encoder.encode(data)); } } ```
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);
这是一个MD5加密工具类,登陆始终是失败的,我用相同的密码123456多次注册发现加密后的密码字符串都是不同的,是不是工具类有错误的原因?
``` package com.easy.demo.utils; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.util.Arrays; /*这是一个非常好用的使用MD5+salt加密的工具类。使用这个工具类,非常简单, 从前台拿到密码password,直接HexUtil.getEncryptedPwd(password)就可以返回一个长度为56的字符串, 可以用来保存到数据库中,相反,登录的时候,因为MD5加密是不可逆的运算,只能拿用户输入的密码走一遍MD5+salt加密之后, 跟数据库中的password比较,看是否一致,一致时密码相同,登录成功,通过调用HexUtil.validpassword(String password,String dbpassword)方法, 就可以了,不用再做其他事。*/ public class MD5Util { private final static String HEX_NUMS_STR = "0123456789ABCDEF"; private final static Integer SALT_LENGTH = 12; /** * 将16进制字符串转换成数组 * * @return byte[] * @author jacob * */ public static byte[] hexStringToByte(String hex) { /* len为什么是hex.length() / 2 ? * 首先,hex是一个字符串,里面的内容是像16进制那样的char数组 * 用2个16进制数字可以表示1个byte,所以要求得这些char[]可以转化成什么样的byte[],首先可以确定的就是长度为这个char[]的一半 */ int len = (hex.length() / 2); byte[] result = new byte[len]; char[] hexChars = hex.toCharArray(); for (int i = 0; i < len; i++) { int pos = i * 2; result[i] = (byte) (HEX_NUMS_STR.indexOf(hexChars[pos]) << 4 | HEX_NUMS_STR .indexOf(hexChars[pos + 1])); } return result; } /** * 将数组转换成16进制字符串 * * @return String * @author jacob * * */ public static String byteToHexString(byte[] salt){ StringBuffer hexString = new StringBuffer(); for (int i = 0; i < salt.length; i++) { String hex = Integer.toHexString(salt[i] & 0xFF); if(hex.length() == 1){ hex = '0' + hex; } hexString.append(hex.toUpperCase()); } return hexString.toString(); } /** * 密码验证 * @param password 用户输入密码 * @param dbpassword 数据库保存的密码 * @return * @throws NoSuchAlgorithmException * @throws UnsupportedEncodingException */ public static boolean validpassword(String password, String dbpassword) throws NoSuchAlgorithmException, UnsupportedEncodingException{ byte[] pwIndb = hexStringToByte(dbpassword); //定义salt byte[] salt = new byte[SALT_LENGTH]; System.arraycopy(pwIndb, 0, salt, 0, SALT_LENGTH); //创建消息摘要对象 MessageDigest md = MessageDigest.getInstance("MD5"); //将盐数据传入消息摘要对象 md.update(salt); md.update(password.getBytes("UTF-8")); byte[] digest = md.digest(); //声明一个对象接收数据库中的口令消息摘要 byte[] digestIndb = new byte[pwIndb.length - SALT_LENGTH]; //获得数据库中口令的摘要 System.arraycopy(pwIndb, SALT_LENGTH, digestIndb, 0,digestIndb.length); //比较根据输入口令生成的消息摘要和数据库中的口令摘要是否相同 if(Arrays.equals(digest, digestIndb)){ //口令匹配相同 return true; }else{ return false; } } /** * 获得md5之后的16进制字符 * @param password 用户输入密码字符 * @return String md5加密后密码字符 * @throws NoSuchAlgorithmException * @throws UnsupportedEncodingException */ public static String getEncryptedPwd(String password) throws NoSuchAlgorithmException, UnsupportedEncodingException{ //拿到一个随机数组,作为盐 byte[] pwd = null; SecureRandom sc= new SecureRandom(); byte[] salt = new byte[SALT_LENGTH]; sc.nextBytes(salt); //声明摘要对象,并生成 MessageDigest md = MessageDigest.getInstance("MD5"); //计算MD5函数 md.update(salt); //password.getBytes("UTF-8")将输入密码变成byte数组,即将某个数装换成一个16进制数 md.update(password.getBytes("UTF-8")); //计算后获得字节数组,这就是那128位了即16个元素 byte[] digest = md.digest(); pwd = new byte[salt.length + digest.length]; System.arraycopy(salt, 0, pwd, 0, SALT_LENGTH); System.arraycopy(digest, 0, pwd, SALT_LENGTH, digest.length); return byteToHexString(pwd); } } //controller层实现登陆的代码 @RequestMapping(value={"/login"}, method=RequestMethod.GET) public boolean login(HttpServletRequest request, @Param(value = "number")String number, @Param(value = "password")String password) throws UnsupportedEncodingException, NoSuchAlgorithmException { password = HexUtil.getEncryptedPwd(password); User user = userMapper.loginUser(number,password); if(user != null){ return true; }else{ return false; } } ``` 密码输入多遍始终登陆失败,尝试注册相同密码发现,每次注册123456加密后的密码都不一样,是不是MD5工具类有错误?
用java实现:上传excl表格。读取数据,输出结果。
package chexianchaxun; import java.io.*; public class FeiYong{ public static void main(String[] args) throws Exception { java.net.URL url = new java.net.URL("http://********"); java.net.URLConnection con = url.openConnection(); con.setUseCaches(false); con.setDoOutput(true); con.setDoInput(true); DataOutputStream dataOut = new DataOutputStream(con.getOutputStream()); //字节流:InputStream(读取)、OutputStream(写入) String Msg = "<Request> <VinNo>ZAMJK39E6B0060491</VinNo><LicenseNo></LicenseNo><LoginID>215288</LoginID></Request>" ; /**转保车辆VinNo为必填 */ System.out.println(Msg); //字符流:Writer(写入)、Reader(读取) dataOut.write(Msg.getBytes("gbk"));//将已经解析出来的字节数据转化为gbk编码格式的字符串 dataOut.flush(); dataOut.close(); InputStream is = con.getInputStream(); InputStreamReader isr = new InputStreamReader(is, "gbk"); BufferedReader br = new BufferedReader(isr); StringBuffer sb = new StringBuffer(); String templine=null; while ((templine = br.readLine()) != null) sb.append(templine); System.out.println(sb.toString()); } } 如上。 当个输入信息车架号,通过接口,可以获取对应的数据信息。 现需要实现,excl表格形式上传,表格内有多条车辆的车架号数据,通过接口,然后再获取对应的数据信息。 感谢Always_MyLoverX 的耐心回答
我有md5加密工具类了,但是不会去调用,要在哪个层去调用?
![图片说明](https://img-ask.csdn.net/upload/201909/18/1568792334_186753.png) ``` package com.easy.demo.utils; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.util.Arrays; /*这是一个非常好用的使用MD5+salt加密的工具类。使用这个工具类,非常简单, 从前台拿到密码password,直接HexUtil.getEncryptedPwd(password)就可以返回一个长度为56的字符串, 可以用来保存到数据库中,相反,登录的时候,因为MD5加密是不可逆的运算,只能拿用户输入的密码走一遍MD5+salt加密之后, 跟数据库中的password比较,看是否一致,一致时密码相同,登录成功,通过调用HexUtil.validpassword(String password,String dbpassword)方法, 就可以了,不用再做其他事。*/ public class MD5Util { private final static String HEX_NUMS_STR = "0123456789ABCDEF"; private final static Integer SALT_LENGTH = 12; /** * 将16进制字符串转换成数组 * * @return byte[] * @author jacob * */ public static byte[] hexStringToByte(String hex) { /* len为什么是hex.length() / 2 ? * 首先,hex是一个字符串,里面的内容是像16进制那样的char数组 * 用2个16进制数字可以表示1个byte,所以要求得这些char[]可以转化成什么样的byte[],首先可以确定的就是长度为这个char[]的一半 */ int len = (hex.length() / 2); byte[] result = new byte[len]; char[] hexChars = hex.toCharArray(); for (int i = 0; i < len; i++) { int pos = i * 2; result[i] = (byte) (HEX_NUMS_STR.indexOf(hexChars[pos]) << 4 | HEX_NUMS_STR .indexOf(hexChars[pos + 1])); } return result; } /** * 将数组转换成16进制字符串 * * @return String * @author jacob * * */ public static String byteToHexString(byte[] salt){ StringBuffer hexString = new StringBuffer(); for (int i = 0; i < salt.length; i++) { String hex = Integer.toHexString(salt[i] & 0xFF); if(hex.length() == 1){ hex = '0' + hex; } hexString.append(hex.toUpperCase()); } return hexString.toString(); } /** * 密码验证 * @param password 用户输入密码 * @param dbpassword 数据库保存的密码 * @return * @throws NoSuchAlgorithmException * @throws UnsupportedEncodingException */ public static boolean validpassword(String password, String dbpassword) throws NoSuchAlgorithmException, UnsupportedEncodingException{ byte[] pwIndb = hexStringToByte(dbpassword); //定义salt byte[] salt = new byte[SALT_LENGTH]; System.arraycopy(pwIndb, 0, salt, 0, SALT_LENGTH); //创建消息摘要对象 MessageDigest md = MessageDigest.getInstance("MD5"); //将盐数据传入消息摘要对象 md.update(salt); md.update(password.getBytes("UTF-8")); byte[] digest = md.digest(); //声明一个对象接收数据库中的口令消息摘要 byte[] digestIndb = new byte[pwIndb.length - SALT_LENGTH]; //获得数据库中口令的摘要 System.arraycopy(pwIndb, SALT_LENGTH, digestIndb, 0,digestIndb.length); //比较根据输入口令生成的消息摘要和数据库中的口令摘要是否相同 if(Arrays.equals(digest, digestIndb)){ //口令匹配相同 return true; }else{ return false; } } /** * 获得md5之后的16进制字符 * @param password 用户输入密码字符 * @return String md5加密后密码字符 * @throws NoSuchAlgorithmException * @throws UnsupportedEncodingException */ public static String getEncryptedPwd(String password) throws NoSuchAlgorithmException, UnsupportedEncodingException{ //拿到一个随机数组,作为盐 byte[] pwd = null; SecureRandom sc= new SecureRandom(); byte[] salt = new byte[SALT_LENGTH]; sc.nextBytes(salt); //声明摘要对象,并生成 MessageDigest md = MessageDigest.getInstance("MD5"); //计算MD5函数 md.update(salt); //password.getBytes("UTF-8")将输入密码变成byte数组,即将某个数装换成一个16进制数 md.update(password.getBytes("UTF-8")); //计算后获得字节数组,这就是那128位了即16个元素 byte[] digest = md.digest(); pwd = new byte[salt.length + digest.length]; System.arraycopy(salt, 0, pwd, 0, SALT_LENGTH); System.arraycopy(digest, 0, pwd, SALT_LENGTH, digest.length); return byteToHexString(pwd); } } ```
如何用Java实现多国语言转码?
:( 最近遇到多国语言的问题,从页面传到后台的字串经过处理为ISO-8859-1编码格式,但是该字符是由繁体中文,日文,韩文等其他国家语言组成的,在后台将其转码成UTF-8形式,日语等无法显示,为???,那么如何才能将ISO-8859-1编码形式的字串转成日语字符串‘汉语字符串等。。。? [b]问题补充:[/b] 所有的编码都用UTF-8不就可以了,不使用ISO-8859-1编码 UTF-8编码占三个字节,也是通用的编码,GOOGLE也是用的UTF-8! sunlightcs (中级程序员) 2009-10-13 我也知道这个情况,但是我在后台获取的时候,将其转化为UTF-8编码形式,显示的为???,改为网上说的日语编码格式iso-(什么给忘了)-jp,结果显示的是口口口。 最好是全部都以unicode编码的字符来表示,也就是\u开头的 lovewhzlq (CTO) 2009 这样就算可以那往数据库里存之前是不是要处理一下?还有就是在toad里用sql语句插值时,日语等其他语言显示为乱码,但是手动直接插是可以的(字段为nvarchar2国际编码) [b]问题补充:[/b] 你前台也用UTF-8啊,就不会是乱码了,网页文件的编码也要是UTF-8啦,不然会有乱码! sunlightcs (中级程序员) 2009-10-14 前台我将获取的字符串转成字节码了,页面本来就是UTF-8编码,但是后台获取的字符串用new String(XX.getBytes("iso-8859-1"),"utf-8"); 转了之后仍然是乱码???。而且我还专门将request和response的字符编码都设置了。。。 [b]问题补充:[/b] 你tomcat里server.xml里有没有设置utf-8编码啊,也要设置一下了 sunlightcs (中级程序员) 2009-10-14 这个没有设置,我去试一下。谢谢哈
java WebSocket 相关 前端已经接收到值了,为什么后台代码还是会出异常呀
java Web Socket 初学者 最近遇到了一个问题 ,就是在后台向前端推送数据时前台页面明明接收到了值,但是后台代码还是会出异常这是为什么! 下面是我写的代码 这个是主线程代码 ``` package test; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.List; public class ChatServer { // 记录所有客户端的Socket public static List<Socket> clientSocket = new ArrayList<Socket>(); public ChatServer() throws Exception { // 创建ServerSocket,准备接受客户端连接 ServerSocket ss = new ServerSocket(30000); while (true) { System.out.println(clientSocket.size()); // 接收客户端连接 Socket socket = ss.accept(); // 将客户端Socket添加到clientSocket集合中 clientSocket.add(socket); // 启动线程 new ServerThread(socket).start(); } } public static void main(String[] args) throws Exception { new ChatServer(); } } ``` 下面是线程内代码 ``` package test; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.security.MessageDigest; import java.util.Iterator; import java.util.regex.Matcher; import java.util.regex.Pattern; import sun.misc.BASE64Encoder; public class ServerThread extends Thread{ private Socket socket; public ServerThread(Socket socket) { this.socket = socket; } private int as = 0; @SuppressWarnings("finally") public void run() { System.out.println("为用户:" + socket.getInetAddress().getHostName() + "开启线程"); try { // 得到Socket对应的输入流 InputStream is = socket.getInputStream(); // 得到Socket对应的输出流 OutputStream out = socket.getOutputStream(); byte[] buff = new byte[1024]; String req = ""; // 读取数据,此时建立与wabSocket的握手 int count = is.read(buff); // 如果读取的数据长度>0 if (count > 0) { // 将读取的数据转化为字符串 req = new String(buff, 0, count); // System.out.println("握手请求:" + req);// req = 客户端信息 // 获取WebSocket的值 String seckey = getSecWebSocketKey(req); String response = "HTTP/1.1 101 Switching Protocols\r\nUpgrade: " + "websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: " + getSecWebSocketAccept(seckey) + "\r\n\r\n"; System.out.println("secAccept = " + getSecWebSocketAccept(seckey)); //推送客户端 out.write(response.getBytes("utf-8")); int hasRedad = 0; // 不断读取WebSocket发送过来的数据 System.out.println("while循环前,等待前端推送数据。。。。。。。。。。。。"); while ((hasRedad = is.read(buff)) > 0) { //必须这么写 System.out.println("接收到客户端" + socket.getInetAddress().getHostName() + "字节数:" + hasRedad); /* * 因为WebSocket发送过来的数据遁寻了一定的协议格式, 其中第3~6个字节是数据掩码, * 从第七个字节开始才是真正的有效数据。 因此程序使用第3~6个字节对后面的数据进行了处理 */ for (int i = 0; i < hasRedad - 6; i++) { buff[i+6] = (byte)(buff[i%4+2]^ buff[i+6]); } //获得从浏览器发送过来的数据 String pushMsg = new String(buff, 6, hasRedad-6, "utf-8"); //遍历Socket集合,依次向每个Socket发送数据 int a=1; for(Iterator<Socket> it = ChatServer.clientSocket.iterator();it.hasNext();){ //获得集合中的Socket对象 System.out.println("Socket集合中有:"+ChatServer.clientSocket.size()+"个对象等待发送信息"); Socket s = it.next(); //发送数据时,第一个字节必须与读到的第一个字节相同 byte[] pushHead = new byte[2]; pushHead[0] = buff[0]; //发送数据时,第二个字节记录 发送数据的长度 pushHead[1] = (byte)pushMsg.getBytes("utf-8").length; try { System.out.println("web推送前"); System.out.println("Socket 的InputStream值:"+is.available()); System.out.println("web推送中........"); //发送前两个字节 s.getOutputStream().write(pushHead); //发送有效数据 s.getOutputStream().write(pushMsg.getBytes("utf-8")); } catch (Exception e) { System.out.println("向前端推送数据后发生了异常"); e.printStackTrace(); }finally{ //如果s.getInputStream().available() == 0,表明该Scoket已经关闭 //将该Socket从Socket集合中删除 System.out.println("从集合中删除该Socket对象"); ChatServer.clientSocket.remove(s); a=2; break; } } System.out.println("WEB 推送后"); if(a==2){ break; } } } } catch (Exception e) { System.out.println("有一个Socket对象关闭了,该对象线程结束"); }finally{ try { //关闭Socket System.out.println("关闭该Socket对象"); socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } // 获取WebSocket请求的Seckey private String getSecWebSocketKey(String req) { // 构建正则表达式,获取Sec-WebSocket-Key:后面的内容 Pattern p = Pattern.compile("^(Sec-WebSocket-Key:).+",Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); Matcher m = p.matcher(req); if (m.find()) { // 提取Sec-WebSocket-Key String foundstring = m.group(); return foundstring.split(":")[1].trim(); } else { return null; } } // 根据WebSocket请求的Seckey计算SecAccept private String getSecWebSocketAccept(String key) throws Exception { String guid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; key += guid; MessageDigest md = MessageDigest.getInstance("SHA-1"); md.update(key.getBytes("ISO-8859-1"), 0, key.length()); byte[] shalHash = md.digest(); BASE64Encoder encoder = new BASE64Encoder(); return encoder.encode(shalHash); } } ``` 没有错误信息,不报错的 但是就是程序走不了了
DatagramSocket为什么会bad address
``` import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class DatagramClient { public static void main(String args[]){ String host="localhost"; if(args.length==1) host=args[0]; DatagramPacket dgp1; DatagramSocket s=null; try{ s=new DatagramSocket(); byte []buffer;//用来存储发送的数据 buffer=new String("hello").getBytes();//字符串转化数组 //将主机名转变为InetAddress类对象,此对象存储有ip对象和地址 InetAddress ia=InetAddress.getByName(host); //创建一个DatagramPacket对象来封装字节数组的指针以及目标地址信息,目标地址包含了ip和端口号 DatagramPacket dgp=new DatagramPacket(buffer,buffer.length,ia,10000); s.send(dgp); byte []buffer2=new byte[50]; //创建一个对象来封装返回来的数据 dgp1=new DatagramPacket(buffer2,buffer.length,ia,10000); s.receive(dgp1); System.out.println("server:"+new String(dgp1.getData())); } catch(IOException e){ System.out.println(e.toString()); } finally{ if(s!=null) s.close(); } } } ``` java.net.SocketException: Bad address: Cannot bind 代码网上直接复制的,这个应该是s=new DatagramSocket();抛出的 这份代码在其他机器上可以运行,在我的电脑上不能运行,把windows防火墙关掉仍然不行 试了下其他的构造函数 想要绑定别的电脑的端口也不行
求大神 大哥优化java 求N的阶乘
ackage cn.zmx; public class Multiply { /** * 这个默认构造方法不能省略,因为有了带参数的构造方法后,类在实例化过程中就 * 不会再创建默认的缺省构造方法。 * 类没有提供任何构造函数,将自动生成一个默认构建函数。 * 但如果有构造函数,则不会自动生成该默认构造函数。 */ public Multiply(){ } public Multiply(int x) { this.setX(x); } private int x = 0;//表示x的阶乘 private int length=0;//计算结果的长度 public int getX() { return x; } /** * 设置x的值,当x值为负数时取绝对值 * @param x * 如当x为-1时,则计算1的阶乘 */ public void setX(int x) { this.x = x>0?x:-x; } public int getLength() { return length; } public void setLength(int length) { this.length = length; } /** * 用于测试的main方法 * @param args */ public static void main(String[] args) { Multiply m = new Multiply(1000); System.out.println("运算开始..."); long startTime = System.currentTimeMillis(); byte[] des = m.calculate(new byte[1]); for(int i=0;i<des.length;i++){ System.out.print(des[i]); if((i+1)%50==0){ System.out.println();//每50个字符 换行 } m.setLength(m.getLength()+1); } long endTime = System.currentTimeMillis(); System.out.println("\n运算结束!\n共耗时:"+(endTime-startTime)/1000+"秒"+ (endTime-startTime)%1000+"毫秒"); System.out.println("总长度为:"+m.getLength()); } /** * * @return result * 以字符串形式返回结果 * 格式: "结果,数据长度,耗时毫秒" */ public String showResult(){ Multiply m = new Multiply(this.getX()); String result=""; long startTime = System.currentTimeMillis(); byte[] des = m.calculate(new byte[1]); for(int i=0;i<des.length;i++){ result += des[i]; m.setLength(m.getLength()+1); } long endTime = System.currentTimeMillis(); return result+","+m.getLength()+","+(endTime-startTime)/1000; } /** * 计算x!并存入des字节数组中 * @param des * @return */ public byte[] calculate(byte[] des) { des[0] = 1; for (int i = 0; i <this.getX(); i++) { des = ArrayMultiply(des ,tobyteArray(i+1, 0, new byte[1]),new byte[1]); } return des; } public byte[] calculate(int x,byte[] des) { des = tobyteArray(x, 0, new byte[1]); return des; } /** * 一个数组乘以一个数后并调整OK * @param b * @param x * @param result * @param offset * 补足0的个数 * @return */ public byte[] ArrayMultiply(byte[] b,int x,byte[] result,int offset){ int carrier = 0;//进位值 byte[] bt = (byte[])b.clone(); for(int i=bt.length-1;i>=0;i--){ bt[i] *= x; int temp = carrier; carrier = (bt[i]+carrier)/10; bt[i] = (byte) ((bt[i]+temp)%10); if(i-1<0&&carrier>0){ result = new byte[bt.length+1]; System.arraycopy(bt,0,result,1,bt.length); result[0] = (byte) carrier; if(offset>0){ byte[] bb = shiftArray(offset,result); return bb; } return result; } } if(offset>0){ byte[] bb = shiftArray(offset, bt); return bb; } return bt; } /** * 数组平移,最右边补足offset个零 * @param offset * @param bt * @return */ private byte[] shiftArray(int offset, byte[] bt) { byte[] bb = new byte[bt.length+offset]; System.arraycopy(bt,0,bb,0,bt.length); return bb; } /** * 计算两个数组相乘,返回一个新的数组OK * @param b1 * {7,5,3,9} * @param b2 * {4,2,6,8,9,4} * @param des * @return */ private byte[] ArrayMultiply(byte[] b1,byte[] b2,byte[] des){ for(int i=b1.length-1;i>=0;i--){ //byte[] b = ArrayMultiply(b2,b1[i],new byte[1],b1.length-1-i); des = ArrayAdd((byte[])des.clone(),ArrayMultiply(b2,b1[i],new byte[1],b1.length-1-i),new byte[1]); } return des; } /** * 两个数组进行按位求和,并按十进制调整长度OK * @param des * @param bs * @param result * @return */ private byte[] ArrayAdd(byte[] des, byte[] bs,byte[] result) { byte[] shortArray = des.length<bs.length?des:bs; byte[] longArray = des.length<bs.length?bs:des; for(int i=shortArray.length-1;i>=0;i--){ longArray[longArray.length-1-(shortArray.length-1-i)] += shortArray[i]; if(longArray[longArray.length-1-(shortArray.length-1-i)]>9){ longArray = AdjustArray((byte[])longArray.clone()); } } return longArray; } /** * 调整一个数组,按10进制进行调整,由src.length-1到0位进行调整 OK * @param src * @return */ private byte[] AdjustArray(byte[] src) { for (int i = src.length-1; i >=0; i--) { if (src[i] > 9) { if (i - 1 <0) { byte[] temp = new byte[src.length + 1]; System.arraycopy(src, 0, temp, 1, src.length); temp[0] += temp[i]/10; temp[i] %= 10; src = AdjustArray(temp); } else { src[i - 1] += src[i]/10; src[i] %= 10; } } } return src; } /** * 将一个整数转化为byte数组OK * @param x * @param index * 初始为0 * @param src * 初始长度1 * @return */ private byte[] tobyteArray(int x,int index,byte[] src){ src[index] = (byte) (x%10); x /= 10; if(x>0){ index++; byte[] temp = new byte[src.length+1]; System.arraycopy(src,0,temp,0,src.length); if(x<=9){ temp[index] = (byte) x; reverseArray(temp); return temp; }else{ src = tobyteArray(x,index,temp); } } return src; } /** * 数组的反转OK * @param src */ private void reverseArray(byte[] src) { if(src.length%2==0){ for(int i=0;i<src.length/2;i++){ swap(src, i); } }else{ for(int i=0;i<(src.length-1)/2;i++){ swap(src, i); } } } /** * 交换数组中两个整数的位置,不定义中间变量OK * @param src * @param i */ private void swap(byte[] src, int i) { src[i] ^= src[src.length-i-1]; src[src.length-i-1] ^= src[i]; src[i] ^= src[src.length-i-1]; } }
关于WebSocket的问题 为什么浏览器关闭后会出一下异常
错误信息 ```java.net.SocketException: Software caused connection abort: recv failed at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:129) at java.net.SocketInputStream.read(SocketInputStream.java:90) at test.UserSocket.run(UserSocket.java:43) java.net.SocketException: Software caused connection abort: recv failed at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:129) at java.net.SocketInputStream.read(SocketInputStream.java:90) at test.UserSocket.run(UserSocket.java:43) ``` 这是一个WebScoket 的小测试。我开了3个浏览器测试正常后,关闭其中一个就会这个异常以下是我的代码麻烦各位大神给看看 ``` package test; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.List; import sun.applet.Main; public class ServerSocketTest { public static List<Socket> clientSocket = new ArrayList<Socket>(); public ServerSocketTest() throws IOException{ ServerSocket ss = new ServerSocket(30000); System.out.println("服务器启动等待客户端连接"); while(true){ Socket s =ss.accept();//等待客户端连接 clientSocket.add(s); System.out.println("客户端总人数"+clientSocket.size()); //为新用户启动线程 new UserSocket(s).start(); } } public static void main(String[] args) throws IOException { new ServerSocketTest(); } } ``` 下面是线程代码 ``` package test; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.SocketException; import java.security.MessageDigest; import java.util.Iterator; import java.util.regex.Matcher; import java.util.regex.Pattern; import sun.misc.BASE64Encoder; public class UserSocket extends Thread{ private Socket socket; public UserSocket(Socket socke){ this.socket = socke; } @Override public void run() { try { InputStream is = socket.getInputStream();//获取用户输入流 OutputStream ops = socket.getOutputStream();//获取用户输出流 byte[] buff = new byte[1024];//字节 String red = ""; //用了存放客户端请求过来的内容(客户端信息) // 读取数据,此时建立与wabSocket的握手 int count = is.read(buff);//读取客户端请求内容的长度 if(count > 0){ //客户端请求数据转化字符串 red = new String(buff,0,count); //获取WebSocket的值 String seckey = getSecWebSocketKey(red); String response = "HTTP/1.1 101 Switching Protocols\r\nUpgrade: " + "websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: " + getSecWebSocketAccept(seckey) + "\r\n\r\n"; //推送向客户端 ops.write(response.getBytes("utf-8")); int hasRedad = 0; // 不断读取WebSocket发送过来的数据 System.out.println("while循环前,等待前端推送数据。。。。。。。。。。。。"); while((hasRedad = is.read(buff))>0){//判断循环读取 System.out.println("后台接收到值,进入While循环处理"); /* * 因为WebSocket发送过来的数据遁寻了一定的协议格式, 其中第3~6个字节是数据掩码, * 从第七个字节开始才是真正的有效数据。 因此程序使用第3~6个字节对后面的数据进行了处理 */ for (int i = 0; i < hasRedad - 6; i++) { buff[i + 6] = (byte) (buff[i % 4 + 2] ^ buff[i + 6]); } //获得从浏览器发送过来的数据 String pushMsg = new String(buff,6,hasRedad - 6, "utf-8");//第一个值要读取的字节,从第几个开始读取,字符串的总长度,字符集 //便利Socket集合,向每个Socket对象发送信息 for (Iterator<Socket> it = ServerSocketTest.clientSocket.iterator();it.hasNext(); ) { try { Socket s = it.next(); byte[] pushHead = new byte[2]; pushHead[0] = buff[0]; pushHead[1] = (byte) pushMsg.getBytes("utf-8").length; //发送前两个字节 s.getOutputStream().write(pushHead); //发送有效数据 s.getOutputStream().write(pushMsg.getBytes("utf-8")); } catch (SocketException e) { //如果捕获到异常将其从集合中删除 // 如果捕捉到异常,表明该Socket已经关闭 it.remove(); } } } } } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); }finally{ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } // 获取WebSocket请求的Seckey private String getSecWebSocketKey(String req) { // 构建正则表达式,获取Sec-WebSocket-Key:后面的内容 Pattern p = Pattern.compile("^(Sec-WebSocket-Key:).+", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); Matcher m = p.matcher(req); if (m.find()) { // 提取Sec-WebSocket-Key String foundstring = m.group(); return foundstring.split(":")[1].trim(); } else { return null; } } // 根据WebSocket请求的Seckey计算SecAccept private String getSecWebSocketAccept(String key) throws Exception { String guid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; key += guid; MessageDigest md = MessageDigest.getInstance("SHA-1"); md.update(key.getBytes("ISO-8859-1"), 0, key.length()); byte[] shalHash = md.digest(); BASE64Encoder encoder = new BASE64Encoder(); return encoder.encode(shalHash); } } ``` 刚才又调试了几次,发现了一些新的东西。 同时开启多个页面进行程序测试。当其中一个页面关闭时,这个页面向后台发送了一条数据,后台接收后处理并发送给其他页面。但是这个页面关闭了,本线程下发送给其他页面的信息全部发送失败。由于发送信息发送不出去,本线程就在此处 ``` } catch (SocketException e) { //如果捕获到异常将其从集合中删除 // 如果捕捉到异常,表明该Socket已经关闭 it.remove(); } ``` 把其他的Socket对象全部删除了,导致所有的Socket对象连接都断开了。求教大神们有没有什么靠谱的解决办法
跪求高手帮忙看下程序为什么android连接不到servlet上,谢谢大家了
android客户端 package com.android.helloworld; import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class ButtonDemo extends Activity{ private Button button; private String username; private String psw; private EditText editText; private EditText editText2; public void onCreate(Bundle queding){ super.onCreate(queding); /** * 设置界面 */ setContentView(R.layout.activity_main); /** * 根据ID找到界面上的按钮对象 */ button=(Button) findViewById(R.id.button1); /** * 为按钮绑定点击时间 */ button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { /** * 根据ID找到界面中的输入框 */ editText=(EditText) findViewById(R.id.editText1); /** * 根据ID找到界面中的输入框 */ editText2=(EditText) findViewById(R.id.editText2); /** * 把输入框中的内容去除空格后获得并且交给变量 */ username=editText.getText().toString().trim(); /** * 把输入框中的内容去除空格后获得并且交给变量 */ psw=editText2.getText().toString().trim(); /** * 构建需要传输的XML */ /** * 将构建的XML转化成字符串 */ String xml="username"+username+"psw"+psw; // /** // * 打印日志 // */ // Log.i("得到数据", "用户名"+username+"密码"+psw); /** * 打印看获得的数据和用户输入的数据是否一样 */ System.out.println("用户名"+username+"密码"+psw); try { /** * 服务器位置 */ URL url=new URL("http://127.0.0.1:8080/TestAndroid/1.do"); /** * 打开一个服务器的连接 */ HttpURLConnection connection=(HttpURLConnection) url.openConnection(); /** * 设置超时时间 单位毫秒 */ connection.setConnectTimeout(5000); /** * 允许输入 */ connection.setDoInput(true); /** * 允许输出 */ connection.setDoOutput(true); /** * 设置不允许用缓存 */ connection.setUseCaches(false); /** * 设置请求方法 */ connection.setRequestMethod("POST"); /** * 设置发送字符串的编码格式 */ connection.setRequestProperty("Conten-Type", "text/xml;charset=UTF-8"); /** * 通过IO流的方式发送数据给服务器 */ OutputStream outputStream=connection.getOutputStream(); /** * 设置将XML转化为字节的形式进行传输,编码方式是UTF-8 */ outputStream.write(xml.getBytes("UTF-8")); /** * 将输出流交给数据流发送 */ DataOutputStream dataOutputStream=new DataOutputStream(outputStream); /** * 将数据发送出去并且清空数据输出流 */ dataOutputStream.flush(); /** * 关闭输出流并且释放占用的资源空间 */ dataOutputStream.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }); } } servlet端 package testservlet; import java.io.BufferedInputStream; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class TestServlet extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); // response.setContentType("text/xml;charset=utf-8"); // BufferedInputStream bufferedInputStream=new BufferedInputStream(request.getInputStream()); // byte[] bytes=new byte[1024*1024]; // int len=0; // while((len=bufferedInputStream.read(bytes))!=-1){ // System.out.println(bytes); // System.out.println(bytes.toString()); // } // System.out.println(len); System.out.println(111111); } } 有知道的告诉下怎么才可以解决 谢谢了 QQ704532683
jsp中javabean优化。。。。
public class Multiply { public Multiply(){ } public Multiply(int x) { this.setX(x); } private int x = 0;//表示x的阶乘 private int length=0;//计算结果的长度 public int getX() { return x; } /** * 设置x的值,当x值为负数时取绝对值 * @param x * 如当x为-1时,则计算1的阶乘 */ public void setX(int x) { this.x = x>0?x:-x; } public int getLength() { return length; } public void setLength(int length) { this.length = length; } /** * 用于测试的main方法 * @param args */ public static void main(String[] args) { Multiply m = new Multiply(1000); System.out.println("运算开始..."); long startTime = System.currentTimeMillis(); byte[] des = m.calculate(new byte[1]); for(int i=0;i<des.length;i++){ System.out.print(des[i]); if((i+1)%50==0){ System.out.println(); } m.setLength(m.getLength()+1); } long endTime = System.currentTimeMillis(); System.out.println("\n运算结束!\n共耗时:"+(endTime-startTime)/1000+"秒"+ (endTime-startTime)%1000+"毫秒"); System.out.println("总长度为:"+m.getLength()); } /** * * @return result * 以字符串形式返回结果 * 格式: "结果,数据长度,耗时毫秒" */ public String showResult(){ Multiply m = new Multiply(this.getX()); String result=""; long startTime = System.currentTimeMillis(); byte[] des = m.calculate(new byte[1]); for(int i=0;i<des.length;i++){ result += des[i]; m.setLength(m.getLength()+1); } long endTime = System.currentTimeMillis(); return result+","+m.getLength()+","+(endTime-startTime)/1000; } /** * 计算x!并存入des字节数组中 * @param des * @return */ public byte[] calculate(byte[] des) { des[0] = 1; for (int i = 0; i <this.getX(); i++) { des = ArrayMultiply(des ,tobyteArray(i+1, 0, new byte[1]),new byte[1]); } return des; } public byte[] calculate(int x,byte[] des) { des = tobyteArray(x, 0, new byte[1]); return des; } /** * 一个数组乘以一个数后并调整OK * @param b * @param x * @param result * @param offset * 补足0的个数 * @return */ public byte[] ArrayMultiply(byte[] b,int x,byte[] result,int offset){ int carrier = 0;//进位值 byte[] bt = (byte[])b.clone(); for(int i=bt.length-1;i>=0;i--){ bt[i] *= x; int temp = carrier; carrier = (bt[i]+carrier)/10; bt[i] = (byte) ((bt[i]+temp)%10); if(i-1<0&&carrier>0){ result = new byte[bt.length+1]; System.arraycopy(bt,0,result,1,bt.length); result[0] = (byte) carrier; if(offset>0){ byte[] bb = shiftArray(offset,result); return bb; } return result; } } if(offset>0){ byte[] bb = shiftArray(offset, bt); return bb; } return bt; } /** * 数组平移,最右边补足offset个零 * @param offset * @param bt * @return */ private byte[] shiftArray(int offset, byte[] bt) { byte[] bb = new byte[bt.length+offset]; System.arraycopy(bt,0,bb,0,bt.length); return bb; } /** * 计算两个数组相乘,返回一个新的数组OK * @param b1 * {7,5,3,9} * @param b2 * {4,2,6,8,9,4} * @param des * @return */ private byte[] ArrayMultiply(byte[] b1,byte[] b2,byte[] des){ for(int i=b1.length-1;i>=0;i--){ //byte[] b = ArrayMultiply(b2,b1[i],new byte[1],b1.length-1-i); des = ArrayAdd((byte[])des.clone(),ArrayMultiply(b2,b1[i],new byte[1],b1.length-1-i),new byte[1]); } return des; } /** * 两个数组进行按位求和,并按十进制调整长度OK * @param des * @param bs * @param result * @return */ private byte[] ArrayAdd(byte[] des, byte[] bs,byte[] result) { byte[] shortArray = des.length<bs.length?des:bs; byte[] longArray = des.length<bs.length?bs:des; for(int i=shortArray.length-1;i>=0;i--){ longArray[longArray.length-1-(shortArray.length-1-i)] += shortArray[i]; if(longArray[longArray.length-1-(shortArray.length-1-i)]>9){ longArray = AdjustArray((byte[])longArray.clone()); } } return longArray; } /** * 调整一个数组,按10进制进行调整,由src.length-1到0位进行调整 OK * @param src * @return */ private byte[] AdjustArray(byte[] src) { for (int i = src.length-1; i >=0; i--) { if (src[i] > 9) { if (i - 1 <0) { byte[] temp = new byte[src.length + 1]; System.arraycopy(src, 0, temp, 1, src.length); temp[0] += temp[i]/10; temp[i] %= 10; src = AdjustArray(temp); } else { src[i - 1] += src[i]/10; src[i] %= 10; } } } return src; } /** * 将一个整数转化为byte数组OK * @param x * @param index * 初始为0 * @param src * 初始长度1 * @return */ private byte[] tobyteArray(int x,int index,byte[] src){ src[index] = (byte) (x%10); x /= 10; if(x>0){ index++; byte[] temp = new byte[src.length+1]; System.arraycopy(src,0,temp,0,src.length); if(x<=9){ temp[index] = (byte) x; reverseArray(temp); return temp; }else{ src = tobyteArray(x,index,temp); } } return src; } /** * 数组的反转OK * @param src */ private void reverseArray(byte[] src) { if(src.length%2==0){ for(int i=0;i<src.length/2;i++){ swap(src, i); } }else{ for(int i=0;i<(src.length-1)/2;i++){ swap(src, i); } } } /** * 交换数组中两个整数的位置,不定义中间变量OK * @param src * @param i */ private void swap(byte[] src, int i) { src[i] ^= src[src.length-i-1]; src[src.length-i-1] ^= src[i]; src[i] ^= src[src.length-i-1]; } }
用多线程优化一下代码
package jiecheng; public class Multiply { public Multiply(){ } public Multiply(int x) { this.setX(x); } private int x = 0;//表示x的阶乘 private int length=0;//计算结果的长度 public int getX() { return x; } /** * 设置x的值,当x值为负数时取绝对值 * @param x * 如当x为-1时,则计算1的阶乘 */ public void setX(int x) { this.x = x>0?x:-x; } public int getLength() { return length; } public void setLength(int length) { this.length = length; } /** * 用于测试的main方法 * @param args */ public static void main(String[] args) { Multiply m = new Multiply(1000); System.out.println("运算开始..."); long startTime = System.currentTimeMillis(); byte[] des = m.calculate(new byte[1]); for(int i=0;i<des.length;i++){ System.out.print(des[i]); if((i+1)%50==0){ System.out.println(); } m.setLength(m.getLength()+1); } long endTime = System.currentTimeMillis(); System.out.println("\n运算结束!\n共耗时:"+(endTime-startTime)/1000+"秒"+ (endTime-startTime)%1000+"毫秒"); System.out.println("总长度为:"+m.getLength()); } /** * * @return result * 以字符串形式返回结果 * 格式: "结果,数据长度,耗时毫秒" */ public String showResult(){ Multiply m = new Multiply(this.getX()); String result=""; long startTime = System.currentTimeMillis(); byte[] des = m.calculate(new byte[1]); for(int i=0;i<des.length;i++){ result += des[i]; m.setLength(m.getLength()+1); } long endTime = System.currentTimeMillis(); return result+","+m.getLength()+","+(endTime-startTime)/1000; } /** * 计算x!并存入des字节数组中 * @param des * @return */ public byte[] calculate(byte[] des) { des[0] = 1; for (int i = 0; i <this.getX(); i++) { des = ArrayMultiply(des ,tobyteArray(i+1, 0, new byte[1]),new byte[1]); } return des; } public byte[] calculate(int x,byte[] des) { des = tobyteArray(x, 0, new byte[1]); return des; } /** * 一个数组乘以一个数后并调整OK * @param b * @param x * @param result * @param offset * 补足0的个数 * @return */ public byte[] ArrayMultiply(byte[] b,int x,byte[] result,int offset){ int carrier = 0;//进位值 byte[] bt = (byte[])b.clone(); for(int i=bt.length-1;i>=0;i--){ bt[i] *= x; int temp = carrier; carrier = (bt[i]+carrier)/10; bt[i] = (byte) ((bt[i]+temp)%10); if(i-1<0&&carrier>0){ result = new byte[bt.length+1]; System.arraycopy(bt,0,result,1,bt.length); result[0] = (byte) carrier; if(offset>0){ byte[] bb = shiftArray(offset,result); return bb; } return result; } } if(offset>0){ byte[] bb = shiftArray(offset, bt); return bb; } return bt; } /** * 数组平移,最右边补足offset个零 * @param offset * @param bt * @return */ private byte[] shiftArray(int offset, byte[] bt) { byte[] bb = new byte[bt.length+offset]; System.arraycopy(bt,0,bb,0,bt.length); return bb; } /** * 计算两个数组相乘,返回一个新的数组OK * @param b1 * {7,5,3,9} * @param b2 * {4,2,6,8,9,4} * @param des * @return */ private byte[] ArrayMultiply(byte[] b1,byte[] b2,byte[] des){ for(int i=b1.length-1;i>=0;i--){ //byte[] b = ArrayMultiply(b2,b1[i],new byte[1],b1.length-1-i); des = ArrayAdd((byte[])des.clone(),ArrayMultiply(b2,b1[i],new byte[1],b1.length-1-i),new byte[1]); } return des; } /** * 两个数组进行按位求和,并按十进制调整长度OK * @param des * @param bs * @param result * @return */ private byte[] ArrayAdd(byte[] des, byte[] bs,byte[] result) { byte[] shortArray = des.length<bs.length?des:bs; byte[] longArray = des.length<bs.length?bs:des; for(int i=shortArray.length-1;i>=0;i--){ longArray[longArray.length-1-(shortArray.length-1-i)] += shortArray[i]; if(longArray[longArray.length-1-(shortArray.length-1-i)]>9){ longArray = AdjustArray((byte[])longArray.clone()); } } return longArray; } /** * 调整一个数组,按10进制进行调整,由src.length-1到0位进行调整 OK * @param src * @return */ private byte[] AdjustArray(byte[] src) { for (int i = src.length-1; i >=0; i--) { if (src[i] > 9) { if (i - 1 <0) { byte[] temp = new byte[src.length + 1]; System.arraycopy(src, 0, temp, 1, src.length); temp[0] += temp[i]/10; temp[i] %= 10; src = AdjustArray(temp); } else { src[i - 1] += src[i]/10; src[i] %= 10; } } } return src; } /** * 将一个整数转化为byte数组OK * @param x * @param index * 初始为0 * @param src * 初始长度1 * @return */ private byte[] tobyteArray(int x,int index,byte[] src){ src[index] = (byte) (x%10); x /= 10; if(x>0){ index++; byte[] temp = new byte[src.length+1]; System.arraycopy(src,0,temp,0,src.length); if(x<=9){ temp[index] = (byte) x; reverseArray(temp); return temp; }else{ src = tobyteArray(x,index,temp); } } return src; } /** * 数组的反转OK * @param src */ private void reverseArray(byte[] src) { if(src.length%2==0){ for(int i=0;i<src.length/2;i++){ swap(src, i); } }else{ for(int i=0;i<(src.length-1)/2;i++){ swap(src, i); } } } /** * 交换数组中两个整数的位置,不定义中间变量OK * @param src * @param i */ private void swap(byte[] src, int i) { src[i] ^= src[src.length-i-1]; src[src.length-i-1] ^= src[i]; src[i] ^= src[src.length-i-1]; } }
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
阿里面试官问我:如何设计秒杀系统?我的回答让他比起大拇指
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图和个人联系方式,欢迎Star和指教 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n...
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
Android性能优化(4):UI渲染机制以及优化
文章目录1. 渲染机制分析1.1 渲染机制1.2 卡顿现象1.3 内存抖动2. 渲染优化方式2.1 过度绘制优化2.1.1 Show GPU overdraw2.1.2 Profile GPU Rendering2.2 卡顿优化2.2.1 SysTrace2.2.2 TraceView 在从Android 6.0源码的角度剖析View的绘制原理一文中,我们了解到View的绘制流程有三个步骤,即m...
微服务中的Kafka与Micronaut
今天,我们将通过Apache Kafka主题构建一些彼此异步通信的微服务。我们使用Micronaut框架,它为与Kafka集成提供专门的库。让我们简要介绍一下示例系统的体系结构。我们有四个微型服务:订单服务,行程服务,司机服务和乘客服务。这些应用程序的实现非常简单。它们都有内存存储,并连接到同一个Kafka实例。 我们系统的主要目标是为客户安排行程。订单服务应用程序还充当网关。它接收来自客户的请求...
致 Python 初学者们!
作者| 许向武 责编 | 屠敏 出品 | CSDN 博客 前言 在 Python 进阶的过程中,相信很多同学应该大致上学习了很多 Python 的基础知识,也正在努力成长。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 Python 这门编程语言,从2009年开始单一使用 Python 应对所有的开发工作,直至今...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观...
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序消费,我整理了一下
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
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...
SpringBoot2.x系列教程(三十六)SpringBoot之Tomcat配置
Spring Boot默认内嵌的Tomcat为Servlet容器,关于Tomcat的所有属性都在ServerProperties配置类中。同时,也可以实现一些接口来自定义内嵌Servlet容器和内嵌Tomcat等的配置。 关于此配置,网络上有大量的资料,但都是基于SpringBoot1.5.x版本,并不适合当前最新版本。本文将带大家了解一下最新版本的使用。 ServerProperties的部分源...
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那么牛的一个东...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
听说想当黑客的都玩过这个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年全新Java学习路线图,含配套视频,学完即为中级Java程序员!!
新的一年来临,突如其来的疫情打破了平静的生活! 在家的你是否很无聊,如果无聊就来学习吧! 世上只有一种投资只赚不赔,那就是学习!!! 传智播客于2020年升级了Java学习线路图,硬核升级,免费放送! 学完你就是中级程序员,能更快一步找到工作! 一、Java基础 JavaSE基础是Java中级程序员的起点,是帮助你从小白到懂得编程的必经之路。 在Java基础板块中有6个子模块的学...
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合...
爬取薅羊毛网站百度云资源
这是疫情期间无聊做的爬虫, 去获取暂时用不上的教程 import threading import time import pandas as pd import requests import re from threading import Thread, Lock # import urllib.request as request # req=urllib.request.Requ...
如何优雅地打印一个Java对象?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能这么蹉跎下去了。于是痛下决心,准备通过输出的方式倒逼输入,以此来修炼自己的内功,从而进阶成为一名真正意义上的大神。与此同时,希望这些文章能够帮助到更多的读者,让大家在学习的路上不再寂寞、空虚和冷。 ...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名...
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计...
HTML5适合的情人节礼物有纪念日期功能
前言 利用HTML5,css,js实现爱心树 以及 纪念日期的功能 网页有播放音乐功能 以及打字倾诉感情的画面,非常适合情人节送给女朋友 具体的HTML代码 具体只要修改代码里面的男某某和女某某 文字段也可自行修改,还有代码下半部分的JS代码需要修改一下起始日期 注意月份为0~11月 也就是月份需要减一。 当然只有一部分HTML和JS代码不够运行的,文章最下面还附加了完整代码的下载地址 &lt;!...
Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇
今天介绍的项目是使用 Itchat 发送统计报告 项目功能设计: 定时爬取疫情数据存入Mysql 进行数据分析制作疫情报告 使用itchat给亲人朋友发送分析报告 基于Django做数据屏幕 使用Tableau做数据分析 来看看最终效果 目前已经完成,预计2月12日前更新 使用 itchat 发送数据统计报告 itchat 是一个基于 web微信的一个框架,但微信官方并不允许使用这...
python沙箱逃逸
沙箱逃逸是CTF和实际场景中经常遇到的一种情况。需要利用python的特性来实现逃逸。本文详细介绍了关于python逃逸的基础以及一些构造payload方法,并且附加习题提供练习。
作为程序员的我,大学四年一直自学,全靠这些实用工具和学习网站!
我本人因为高中沉迷于爱情,导致学业荒废,后来高考,毫无疑问进入了一所普普通通的大学,实在惭愧???? 我又是那么好强,现在学历不行,没办法改变的事情了,所以,进入大学开始,我就下定决心,一定要让自己掌握更多的技能,尤其选择了计算机这个行业,一定要多学习技术。 在进入大学学习不久后,我就认清了一个现实:我这个大学的整体教学质量和学习风气,真的一言难尽,懂的人自然知道怎么回事? 怎么办?我该如何更好的提升自...
新来个技术总监,禁止我们使用Lombok!
我有个学弟,在一家小型互联网公司做Java后端开发,最近他们公司新来了一个技术总监,这位技术总监对技术细节很看重,一来公司之后就推出了很多"政策",比如定义了很多开发规范、日志规范、甚至是要求大家统一使用某一款IDE。 但是这些都不是我这个学弟和我吐槽的点,他真正和我吐槽的是,他很不能理解,这位新来的技术总监竟然禁止公司内部所有开发使用Lombok。但是又没给出十分明确的,可以让人信服的理由。 于...
教你如何编写第一个简单的爬虫
很多人知道爬虫,也很想利用爬虫去爬取自己想要的数据,那么爬虫到底怎么用呢?今天就教大家编写一个简单的爬虫。 下面以爬取笔者的个人博客网站为例获取第一篇文章的标题名称,教大家学会一个简单的爬虫。 第一步:获取页面 #!/usr/bin/python # coding: utf-8 import requests #引入包requests link = "http://www.santostang....
相关热词 c#开发的dll注册 c#的反射 c# grid绑定数据源 c#多线程怎么循环 c# 鼠标左键 c# char占位符 c# 日期比较 c#16进制转换为int c#用递归求顺序表中最大 c#小型erp源代码
立即提问