string。StringBuilder。StringBuffer的相关问题

 String、StringBuffer与StringBuilder之间区别?简述各自的执行效率?

9个回答

String是字符串的数据结构,StringBuffer和StringBuilder都是对字符串进行拼接操作用的,二者功能等效,区别是 StringBuilder是线程不安全的,适用于单线程管理下,而且效率高;StringBuffer是线程安全的,并发环境下使用较好。

1.三者在执行速度方面的比较:StringBuilder > StringBuffer > String

  2.String <(StringBuffer,StringBuilder)的原因

    String:字符串常量

    StringBuffer:字符创变量

    StringBuilder:字符创变量

效率:频繁操作builder最快不安全,buffer次之安全,介绍这个的博客介绍很多,搜一下细看。

一般字符串拼接都是是用stringBuffer

StringBuffer、StringBuilder和String一样,也用来代表字符串。String类是不可变类,任何对String的改变都 会引发新的String对象的生成;StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生新的对象。既然可变和不可变都有了,为何还有一个StringBuilder呢?相信初期的你,在进行append时,一般都会选择StringBuffer吧!
先说一下集合的故事,HashTable是线程安全的,很多方法都是synchronized方法,而HashMap不是线程安全的,但其在单线程程序中的性能比HashTable要高。StringBuffer和StringBuilder类的区别也是如此,他们的原理和操作基本相同,区别在于StringBufferd支持并发操作,线性安全的,适 合多线程中使用。StringBuilder不支持并发操作,线性不安全的,不适合多线程中使用。新引入的StringBuilder类不是线程安全的,但其在单线程中的性能比StringBuffer高。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
String StringBuilder 以及StringBuffer
[code="java"] public class Test1 { /** * @param args */ public static void main(String[] args) { long strbuilderTime1=System.currentTimeMillis(); StringBuilder str=new StringBuilder("123"); for(int i=0;i<10000;i++){ str.append("1"); } System.out.println(str.toString()); System.out.print("StringBuilder耗时:"); System.out.println(System.currentTimeMillis()-strbuilderTime1); long strbuilderTime2=System.currentTimeMillis(); StringBuffer str1=new StringBuffer("123"); for(int i=0;i<10000;i++){ str1.append("1"); } System.out.println(str1.toString()); System.out.print("StringBuffer耗时:"); System.out.println(System.currentTimeMillis()-strbuilderTime2); long strbuilderTime3=System.currentTimeMillis(); String str2="123"; for(int i=0;i<10000;i++){ str2=str2+"1"; } System.out.println(str2.toString()); System.out.print("String耗时:"); System.out.println(System.currentTimeMillis()-strbuilderTime3); } } 反编译 的: Code: 0: aload_0 1: invokespecial #8; //Method java/lang/Object."<init>":()V 4: return public static void main(java.lang.String[]); Code: 0: invokestatic #16; //Method java/lang/System.currentTimeMillis:()J 3: lstore_1 4: new #22; //class java/lang/StringBuilder 7: dup 8: ldc #24; //String 123 10: invokespecial #26; //Method java/lang/StringBuilder."<init>":(Ljava/la ng/String;)V 13: astore_3 14: iconst_0 15: istore 4 17: goto 30 20: aload_3 21: ldc #29; //String 1 23: invokevirtual #31; //Method java/lang/StringBuilder.append:(Ljava/lang /String;)Ljava/lang/StringBuilder; 26: pop 27: iinc 4, 1 30: iload 4 32: sipush 10000 35: if_icmplt 20 38: getstatic #35; //Field java/lang/System.out:Ljava/io/PrintStream; 41: aload_3 42: invokevirtual #39; //Method java/lang/StringBuilder.toString:()Ljava/l ang/String; 45: invokevirtual #43; //Method java/io/PrintStream.println:(Ljava/lang/St ring;)V 48: getstatic #35; //Field java/lang/System.out:Ljava/io/PrintStream; 51: ldc #48; //String StringBuilder耗时: 53: invokevirtual #50; //Method java/io/PrintStream.print:(Ljava/lang/Stri ng;)V 56: getstatic #35; //Field java/lang/System.out:Ljava/io/PrintStream; 59: invokestatic #16; //Method java/lang/System.currentTimeMillis:()J 62: lload_1 63: lsub 64: invokevirtual #53; //Method java/io/PrintStream.println:(J)V 67: invokestatic #16; //Method java/lang/System.currentTimeMillis:()J 70: lstore 4 72: new #56; //class java/lang/StringBuffer 75: dup 76: ldc #24; //String 123 78: invokespecial #58; //Method java/lang/StringBuffer."<init>":(Ljava/lan g/String;)V 81: astore 6 83: iconst_0 84: istore 7 86: goto 100 89: aload 6 91: ldc #29; //String 1 93: invokevirtual #59; //Method java/lang/StringBuffer.append:(Ljava/lang/ String;)Ljava/lang/StringBuffer; 96: pop 97: iinc 7, 1 100: iload 7 102: sipush 10000 105: if_icmplt 89 108: getstatic #35; //Field java/lang/System.out:Ljava/io/PrintStream; 111: aload 6 113: invokevirtual #62; //Method java/lang/StringBuffer.toString:()Ljava/la ng/String; 116: invokevirtual #43; //Method java/io/PrintStream.println:(Ljava/lang/St ring;)V 119: getstatic #35; //Field java/lang/System.out:Ljava/io/PrintStream; 122: ldc #63; //String StringBuffer耗时: 124: invokevirtual #50; //Method java/io/PrintStream.print:(Ljava/lang/Stri ng;)V 127: getstatic #35; //Field java/lang/System.out:Ljava/io/PrintStream; 130: invokestatic #16; //Method java/lang/System.currentTimeMillis:()J 133: lload 4 135: lsub 136: invokevirtual #53; //Method java/io/PrintStream.println:(J)V 139: invokestatic #16; //Method java/lang/System.currentTimeMillis:()J 142: lstore 7 144: ldc #24; //String 123 146: astore 9 148: iconst_0 149: istore 10 151: goto 179 154: new #22; //class java/lang/StringBuilder 157: dup 158: aload 9 160: invokestatic #65; //Method java/lang/String.valueOf:(Ljava/lang/Objec t;)Ljava/lang/String; 163: invokespecial #26; //Method java/lang/StringBuilder."<init>":(Ljava/la ng/String;)V 166: ldc #29; //String 1 168: invokevirtual #31; //Method java/lang/StringBuilder.append:(Ljava/lang /String;)Ljava/lang/StringBuilder; 171: invokevirtual #39; //Method java/lang/StringBuilder.toString:()Ljava/l ang/String; 174: astore 9 176: iinc 10, 1 179: iload 10 181: sipush 10000 184: if_icmplt 154 187: getstatic #35; //Field java/lang/System.out:Ljava/io/PrintStream; 190: aload 9 192: invokevirtual #71; //Method java/lang/String.toString:()Ljava/lang/Str ing; 195: invokevirtual #43; //Method java/io/PrintStream.println:(Ljava/lang/St ring;)V 198: getstatic #35; //Field java/lang/System.out:Ljava/io/PrintStream; 201: ldc #72; //String String耗时: 203: invokevirtual #50; //Method java/io/PrintStream.print:(Ljava/lang/Stri ng;)V 206: getstatic #35; //Field java/lang/System.out:Ljava/io/PrintStream; 209: invokestatic #16; //Method java/lang/System.currentTimeMillis:()J 212: lload 7 214: lsub 215: invokevirtual #53; //Method java/io/PrintStream.println:(J)V 218: return } [/code] 注: jdk 用的是1.6的 1231111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 StringBuilder耗时:31 1231111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 StringBuffer耗时:16 1231111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 String耗时:468 String的+也是编译成StringBuilder,为什么耗时存在这么大的问题啊?why 还有上边反编译的这些代码有高手帮解释一下吗 [b]问题补充:[/b] 对于StringBuffer和StringBuilder这个效率是没有啥说的,测试的时候有点误差,但是明白一个是线程安全,一个是非线程安全,但是String的+是等同于: [code="java"] for(int i = 0; i < 10000; i++){ sb = new StringBuilder(str2); sb.append("1"); str2 = sb.toString(); } [/code] 受益了
StringBuilder和StringBuffer
StringBuilder和StringBuffer 两者的区别及两者常用的方法 在什么情况下使用哪个(换言之~分别适用于什么情况)?
java中,String类和StringBuffer类与StringBuilder类
java中,String类和StringBuffer类与StringBuilder类,这三个类的异同点在哪里
java中String 和StringBuffer有什么区别
java string stringbuf区别是啥呢 还有stringbuilder 怎么用
stringbuffer或stringbuilder中capacity()方法的计算单位
请问stringbuffer或stringbuilder中capacity()方法的计算单位,文档说按字符算,但算出来不一样 StringBuffer sb = new StringBuffer(); String str = "hahahahah~"; sb.append(str); System.out.println(sb.capacity()); 输出16 请高手详解,谢谢!
求解读这段代码是什么意思
public static String conSvr() { (URL)null; (InputStream)null; StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder2 = new StringBuilder(); stringBuilder.append("ben123.a3w.cn"); try { StringBuffer stringBuffer = new StringBuffer(); StringBuffer stringBuffer2 = new StringBuffer(); StringBuffer stringBuffer3 = new StringBuffer(); URL uRL = new URL(stringBuffer.append(stringBuffer2.append(stringBuffer3.append("http://").append(stringBuilder.toString()).toString()).append("/").toString()).append(stringBuilder2.toString()).toString()); HttpURLConnection httpURLConnection = (HttpURLConnection)uRL.openConnection(); httpURLConnection.addRequestProperty("Host", stringBuilder.toString()); if (httpURLConnection.getResponseCode() != 200) return null; InputStream inputStream = httpURLConnection.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader((Reader)inputStreamReader); StringBuilder stringBuilder3 = new StringBuilder(); (String)null; do { String string2; if ((string2 = bufferedReader.readLine()) == null) { return stringBuilder3.toString(); } StringBuffer stringBuffer4 = new StringBuffer(); stringBuilder3.append(stringBuffer4.append(string2).append("\n").toString()); } while (true); } catch (IOException var9_13) { return null; } }
java中String字符串==的疑问?
java中String字符串==的疑问?谁能帮忙解释和理解一下!顺便说一下底层的原理和运行规则? 直接po代码和截图 ``` public class TestString { /** * 测试String */ public static void main(String[] args) { String a = "hello2"; final String b = getStr2(); String c = b + 2; String d = "hello2"; String e = new String("hello2"); String f = new String("hello2"); String h = "hello"; String j = h + 2; StringBuffer sb = new StringBuffer("hello2"); StringBuilder sb2 = new StringBuilder("hello2"); String k = getStr2(); String m = k + 2; System.out.println("c结果" + (a == c)); System.out.println("d结果" + (a == d)); System.out.println("e结果" + (a == e)); System.out.println("f结果" + (a == f)); System.out.println("f.toString()结果" + (a == f.toString())); System.out.println("j结果" + (a == j)); System.out.println("sb.toString()结果" + (a == sb.toString())); System.out.println("sb2.toString()结果" + (a == sb2.toString())); System.out.println("m结果" + (a == m)); } public static String getStr() { String text = "hello"; return text; } public static String getStr2() { return "hello"; } } ``` ![图片说明](https://img-ask.csdn.net/upload/201812/29/1546070226_736593.png) ![图片说明](https://img-ask.csdn.net/upload/201812/29/1546070234_669232.png)
如何快捷重构字符串+-操作为StringBilder或者StringBuffer
代码里有很多String a="aaa"+"bbb"+"ccc"+"ccc";String b="aaa"+a?"ddd":"cccc"+"ddd"; 怎么快速重构?有eclipse插件么? [b]问题补充:[/b] String a="aaa"; String b="aaa"+a; String c=a+b; Integer d=1+2; String e=d==3?"ddd":"cccc"+"ddd"; 所有String都想换成StringBuilder
请教一个关于Spring-task定时任务的问题
List<JSONObject> companyList=getCompanyList(); for(JSONObject company:companyList){ List<JSONObject> todayBirthdays=getBirthdayUsers(getdate(0),company.getString("id")); StringBuffer name=new StringBuffer(); StringBuffer ids=new StringBuffer(); StringBuilder hrsb = new StringBuilder(); ids.append("'"); ids.append("2017121618514C22B68296F31AF8DDE2");//不给XX发 ids.append("'"); ids.append(","); String userIds =""; if(todayBirthdays.size()>0){ for (JSONObject o : todayBirthdays) { name.append(","); name.append(o.getString("name")); ids.append("'"); ids.append(o.getString("id")); ids.append("'"); ids.append(","); } userIds = ids.toString().substring(0, ids.toString().length() - 1); if (name.length() > 0) { name.deleteCharAt(0); } List<JSONObject> remindUsers=userDao.getViewJSONListByCondition(" AND companyId=? AND jobState!=1 AND id NOT in("+userIds+") GROUP BY id",new Object[]{company.getString("id")}); for (JSONObject hrUser : remindUsers) { hrsb.append("|"); hrsb.append(hrUser.getString("id")); } if (hrsb.length() > 0) { hrsb.deleteCharAt(0); } JSONObject msgObject = new JSONObject(); msgObject.put("userIds", hrsb);//object.getString("id") msgObject.put("content", String.format(TODAY_BIRTHDAY_REMIND, name)); tokenDao.sendTextMsg(JSON.toJSONString(msgObject)); } # # 上面的代码,定时任务执行上边代码。我想问问这个会导致服务器占用内存爆炸吗。。是不是因为Stringbuilder的原因,之前手抖没看到怎么写了个Stringbuilder 第二天8.00执行 服务器ok,8.30左右服务器报错数据库连接最大,内存占用到了80% 我想问问是不是这个导致的
这段关于http协议实现xml的代码如何实现?用tomcat+eclipse
客户端发送请求、以及处理服务端响应代码为: //发送xml请求 URL url = new URL("http://127.0.0.1:8080/Test/sendXmlAndReturnXml.do"); String xml = "<aaa><ddd>cccccc客户端请求的xml数据cccccccc</ddd></aaa>"; URLConnection conn = null; conn = url.openConnection(); conn.setUseCaches(false); conn.setDoInput(true); conn.setDoOutput(true); conn.setRequestProperty("Content-Length", Integer.toString(xml.length())); conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8"); OutputStream ops = conn.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(ops, "GBK"); osw.write(xml); osw.flush(); osw.close(); //发送成功后,获取服务器的响应xml串: StringBuffer sb = new StringBuffer(); String line = ""; InputStream is = conn.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is));//三层包装 while ((line = br.readLine()) != null) { sb.append(line+ "\r\n"); } System.out.println(sb.toString()); 服务器端: @Controller public class TestXMLAction { @RequestMapping("/sendXmlAndReturnXml.do") public void sendXmlAndReturnXml(HttpServletRequest request, HttpServletResponse response) throws IOException{ //获取请求的xml System.out.println("请求的xml数据为:\n" + getXmlFromRequest(request)); //服务端响应xml数据 response.getWriter().print("<aaa><ddd>bbbccc服务端返回响应xml数据,在客户端可以获取到</ddd></aaa>"); } //从HTTP请求中取出请求的XML private String getXmlFromRequest(HttpServletRequest request)throws IOException { String reqXml = ""; reqXml = request.getQueryString(); //GET请求 if (StringUtils.isBlank(reqXml)) { //POST请求 BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream())); String line = null; StringBuilder sb = new StringBuilder(); while ((line = br.readLine()) != null) { sb.append(line); } br.close(); reqXml = sb.toString(); } return reqXml; } } ———————————————— 版权声明:本文为CSDN博主「weiwei358」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weiwei358/article/details/83670278
java做易宝支付,所有银行支付通道关闭!
![图片说明](https://img-ask.csdn.net/upload/201906/04/1559649020_753493.jpg) ``` (PaymentUtil工具类) public class PaymentUtil { private static String encodingCharset = "UTF-8"; /** * 生成hmac方法 * * @param p0_Cmd 业务类型 * @param p1_MerId 商户编号 * @param p2_Order 商户订单号 * @param p3_Amt 支付金额 * @param p4_Cur 交易币种 * @param p5_Pid 商品名称 * @param p6_Pcat 商品种类 * @param p7_Pdesc 商品描述 * @param p8_Url 商户接收支付成功数据的地址 * @param p9_SAF 送货地址 * @param pa_MP 商户扩展信息 * @param pd_FrpId 银行编码 * @param pr_NeedResponse 应答机制 * @param keyValue 商户密钥(公司密钥) * @return */ //此方法把原文参数全部放入StringBuilder封装数据 public static String buildHmac(String p0_Cmd,String p1_MerId, String p2_Order, String p3_Amt, String p4_Cur,String p5_Pid, String p6_Pcat, String p7_Pdesc,String p8_Url, String p9_SAF,String pa_MP,String pd_FrpId, String pr_NeedResponse,String keyValue) { StringBuilder sValue = new StringBuilder(); // 业务类型 sValue.append(p0_Cmd); // 商户编号 sValue.append(p1_MerId); // 商户订单号 sValue.append(p2_Order); // 支付金额 sValue.append(p3_Amt); // 交易币种 sValue.append(p4_Cur); // 商品名称 sValue.append(p5_Pid); // 商品种类 sValue.append(p6_Pcat); // 商品描述 sValue.append(p7_Pdesc); // 商户接收支付成功数据的地址 sValue.append(p8_Url); // 送货地址 sValue.append(p9_SAF); // 商户扩展信息 sValue.append(pa_MP); // 银行编码 sValue.append(pd_FrpId); // 应答机制 sValue.append(pr_NeedResponse); //调用易宝工具类加密算法,对所有原文进行加密,返回密文(公司密钥) return PaymentUtil.hmacSign(sValue.toString(), keyValue); } /** * 返回校验hmac方法 * * @param hmac 支付网关发来的加密验证码 * @param p1_MerId 商户编号 * @param r0_Cmd 业务类型 * @param r1_Code 支付结果 * @param r2_TrxId 易宝支付交易流水号 * @param r3_Amt 支付金额 * @param r4_Cur 交易币种 * @param r5_Pid 商品名称 * @param r6_Order 商户订单号 * @param r7_Uid 易宝支付会员ID * @param r8_MP 商户扩展信息 * @param r9_BType 交易结果返回类型 * @param keyValue 密钥 * @return */ public static boolean verifyCallback(String hmac, String p1_MerId, String r0_Cmd, String r1_Code, String r2_TrxId, String r3_Amt, String r4_Cur, String r5_Pid, String r6_Order, String r7_Uid, String r8_MP, String r9_BType, String keyValue) { StringBuilder sValue = new StringBuilder(); // 商户编号 sValue.append(p1_MerId); // 业务类型 sValue.append(r0_Cmd); // 支付结果 sValue.append(r1_Code); // 易宝支付交易流水号 sValue.append(r2_TrxId); // 支付金额 sValue.append(r3_Amt); // 交易币种 sValue.append(r4_Cur); // 商品名称 sValue.append(r5_Pid); // 商户订单号 sValue.append(r6_Order); // 易宝支付会员ID sValue.append(r7_Uid); // 商户扩展信息 sValue.append(r8_MP); // 交易结果返回类型 sValue.append(r9_BType); String sNewString = PaymentUtil.hmacSign(sValue.toString(), keyValue); return sNewString.equals(hmac); } /** * @param aValue * @param aKey * @return */ //把原文和公司密钥传入hmacSign方法进行算法加密得到密文(字符串) public static String hmacSign(String aValue, String aKey) { byte k_ipad[] = new byte[64]; byte k_opad[] = new byte[64]; byte keyb[]; byte value[]; try { keyb = aKey.getBytes(encodingCharset); value = aValue.getBytes(encodingCharset); } catch (UnsupportedEncodingException e) { keyb = aKey.getBytes(); value = aValue.getBytes(); } Arrays.fill(k_ipad, keyb.length, 64, (byte) 54); Arrays.fill(k_opad, keyb.length, 64, (byte) 92); for (int i = 0; i < keyb.length; i++) { k_ipad[i] = (byte) (keyb[i] ^ 0x36); k_opad[i] = (byte) (keyb[i] ^ 0x5c); } MessageDigest md = null; try { md = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { return null; } md.update(k_ipad); md.update(value); byte dg[] = md.digest(); md.reset(); md.update(k_opad); md.update(dg, 0, 16); dg = md.digest(); return toHex(dg); } public static String toHex(byte input[]) { if (input == null) return null; StringBuffer output = new StringBuffer(input.length * 2); for (int i = 0; i < input.length; i++) { int current = input[i] & 0xff; if (current < 16) output.append("0"); output.append(Integer.toString(current, 16)); } return output.toString(); } /** * * @param args * @param key * @return */ public static String getHmac(String[] args, String key) { if (args == null || args.length == 0) { return (null); } StringBuffer str = new StringBuffer(); for (int i = 0; i < args.length; i++) { str.append(args[i]); } return (hmacSign(str.toString(), key)); } /** * @param aValue * @return */ public static String digest(String aValue) { aValue = aValue.trim(); byte value[]; try { value = aValue.getBytes(encodingCharset); } catch (UnsupportedEncodingException e) { value = aValue.getBytes(); } MessageDigest md = null; try { md = MessageDigest.getInstance("SHA"); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return null; } return toHex(md.digest(value)); } // public static void main(String[] args) { // System.out.println(hmacSign("AnnulCard1000043252120080620160450.0http://localhost/SZXpro/callback.asp杩?4564868265473632445648682654736324511","8UPp0KE8sq73zVP370vko7C39403rtK1YwX40Td6irH216036H27Eb12792t")); // } } merchantInfo.properties(配置文件) p1_MerId=10001126856 keyValue=69cl522AV6q613Ii4W6u8K6XuW8vM1N6bFgyv769220IuYe9u37N4y7rI4Pl responseURL=http://api.ecps.com:8080/OrderServlet?method=callback (OrderServlet) @WebServlet(urlPatterns = "/OrderServlet") public class OrderServlet extends BaseServlet { //支付,请求方法 public void pay(HttpServletRequest request,HttpServletResponse response) throws Exception{ // 接受参数 String address=request.getParameter("address"); String name=request.getParameter("name"); String telephone=request.getParameter("telephone"); String oid=request.getParameter("oid"); // 调用业务层方法,更新订单信息 ordersService.updateOrder(name,address,telephone,oid); // 组织发送支付公司需要哪些数据 String pd_FrpId = request.getParameter("pd_FrpId"); String p0_Cmd = "Buy"; String p1_MerId = ResourceBundle.getBundle("merchantInfo").getString("p1_MerId"); String p2_Order = oid; String p3_Amt = "0.01"; String p4_Cur = "CNY"; String p5_Pid = ""; String p6_Pcat = ""; String p7_Pdesc = ""; // 支付成功回调地址 ---- 第三方支付公司会访问、用户访问 // 第三方支付可以访问网址 String p8_Url = ResourceBundle.getBundle("merchantInfo").getString("responseURL"); String p9_SAF = ""; String pa_MP = ""; String pr_NeedResponse = "1"; // 加密hmac 需要密钥 String keyValue = ResourceBundle.getBundle("merchantInfo").getString("keyValue"); // 传入回调地址 String hmac = PaymentUtil.buildHmac(p0_Cmd, p1_MerId, p2_Order, p3_Amt, p4_Cur, p5_Pid, p6_Pcat, p7_Pdesc, p8_Url, p9_SAF, pa_MP, pd_FrpId, pr_NeedResponse, keyValue); // 发送给第三方 StringBuffer sb = new StringBuffer("https://www.yeepay.com/app-merchant-proxy/node?"); sb.append("p0_Cmd=").append(p0_Cmd).append("&"); sb.append("p1_MerId=").append(p1_MerId).append("&"); sb.append("p2_Order=").append(p2_Order).append("&"); sb.append("p3_Amt=").append(p3_Amt).append("&"); sb.append("p4_Cur=").append(p4_Cur).append("&"); sb.append("p5_Pid=").append(p5_Pid).append("&"); sb.append("p6_Pcat=").append(p6_Pcat).append("&"); sb.append("p7_Pdesc=").append(p7_Pdesc).append("&"); sb.append("p8_Url=").append(p8_Url).append("&"); sb.append("p9_SAF=").append(p9_SAF).append("&"); sb.append("pa_MP=").append(pa_MP).append("&"); sb.append("pd_FrpId=").append(pd_FrpId).append("&"); sb.append("pr_NeedResponse=").append(pr_NeedResponse).append("&"); sb.append("hmac=").append(hmac); // Ajax跨域请求不能使用重定向,不能使用转发 // respone.sendRedirect(sb.toString()); //把sb的数据封装到JSON响应会页面 Result re = new Result(Result.SUCCESS,"",sb.toString()); response.getWriter().print(JSONObject.fromObject(re)); // return null; } /*callBack 获取易宝数据,并做比较.数据是否有效,有效则支付成功,支付后的回调方法*/ public String callback(HttpServletRequest request,HttpServletResponse response) throws Exception{ String p1_MerId = request.getParameter("p1_MerId"); String r0_Cmd = request.getParameter("r0_Cmd"); String r1_Code = request.getParameter("r1_Code"); String r2_TrxId = request.getParameter("r2_TrxId"); String r3_Amt = request.getParameter("r3_Amt"); String r4_Cur = request.getParameter("r4_Cur"); String r5_Pid = request.getParameter("r5_Pid"); String r6_Order = request.getParameter("r6_Order"); String r7_Uid = request.getParameter("r7_Uid"); String r8_MP = request.getParameter("r8_MP"); String r9_BType = request.getParameter("r9_BType"); String rb_BankId = request.getParameter("rb_BankId"); String ro_BankOrderId = request.getParameter("ro_BankOrderId"); String rp_PayDate = request.getParameter("rp_PayDate"); String rq_CardNo = request.getParameter("rq_CardNo"); String ru_Trxtime = request.getParameter("ru_Trxtime"); // 身份校验 --- 判断是不是支付公司通知你 String hmac = request.getParameter("hmac"); String keyValue = ResourceBundle.getBundle("merchantInfo").getString( "keyValue"); // 自己对上面数据进行加密 --- 比较支付公司发过来hamc boolean isValid = PaymentUtil.verifyCallback(hmac, p1_MerId, r0_Cmd, r1_Code, r2_TrxId, r3_Amt, r4_Cur, r5_Pid, r6_Order, r7_Uid, r8_MP, r9_BType, keyValue); //判断数据是否有效 if (isValid) { // 响应数据有效 if (r9_BType.equals("1")) { // 浏览器重定向 System.out.println("111"); request.setAttribute("msg", "您的订单号为:"+r6_Order+",金额为:"+r3_Amt+"已经支付成功,等待发货~~"); } else if (r9_BType.equals("2")) { // 修改订单状态: // 服务器点对点 --- 支付公司通知你 System.out.println("付款成功!222"); // 修改订单状态 为已付款 // 回复支付公司success,如果不回复,支付公司会一直通知 response.getWriter().print("success"); } //订单状态,更新订单状态为已经付款 ordersService.updateOrderState(r6_Order); } else { // 数据无效 System.out.println("数据被篡改!"); } return "/jsp/msg.jsp"; } ```
EditText.getText()方法中返回Editable类型值有何作用?
根据[说明][1],`EditText`的`getText()`方法返回值Editable,这有什么特别的用处么?能不能用返回string类型代替? 官方对editable的[说明][2]: This is the interface for text whose content and markup can be changed (as opposed to immutable text like Strings). 实现不可修改功能,为什么不用`StringBuilder`或者`StringBuffer`代替? [1]: http://developer.android.com/reference/android/widget/EditText.html#getText%28%29 [2]: http://developer.android.com/reference/android/text/Editable.html
用Java抓取网页内容筛选邮箱的程序,运行无结果(没有报错)
问题出在哪里?可能的问题已经在注释中标出 代码如下 ``` package test; import java.io.*; import java.net.*; import java.util.regex.Matcher; import java.util.regex.Pattern; public class email { public static void main(String[] args) { String regex="[a-zA-Z_0-9]+@(\\.[a-zA-Z_0-9]{2,3})+"; String s=""; String line=null; try{ URL url=new URL("http://tieba.baidu.com/p/4232750852"); HttpURLConnection uc=(HttpURLConnection)url.openConnection(); BufferedReader br=new BufferedReader(new InputStreamReader(uc.getInputStream())); PrintWriter pw=new PrintWriter(new FileWriter("d:\\data.txt"),true); while((line=br.readLine())!=null){ s=s+line;//如果s用StringBuilder或者StringBuffer代替(s=null)则抛出 NullPointerException } Pattern p=Pattern.compile(regex); Matcher m=p.matcher(s); while(m.find()){ pw.println(m.group()); } pw.close(); }catch(Exception e){ e.printStackTrace(); } } } ```
亚马逊 mws对接系统时SignatureDoesNotMatch报错
错误内容: <?xml version="1.0"?> <ErrorResponse xmlns="https://mws.amazonservices.com/Orders/2013-09-01"> <Error> <Type>Sender</Type> <Code>SignatureDoesNotMatch</Code> <Message>The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.</Message> </Error> <RequestID>23142876-a0db-42f5-9ba9-527313c7bb78</RequestID> </ErrorResponse> 我的代码: public class TestUtl { private static final String CHARACTER_ENCODING = "UTF-8"; final static String ALGORITHM = "HmacSHA256"; public static void main(String[] args) throws Exception { String timestamp = AmazonTimeUtil.getAmaZonTime(); String secretKey = "iXvQ+bHDVSkaMBaXXXXXXXXXXXXXXXX"; // Use the endpoint for your marketplace String serviceUrl = "https://mws.amazonservices.com/"; // Create set of parameters needed and store in a map HashMap<String, String> parameters = new HashMap<String, String>(); // Add required parameters. Change these as needed. parameters.put("AWSAccessKeyId", urlEncode("AKIAJXAAD6Y2XXXXXXXX")); parameters.put("SignatureMethod", urlEncode("HmacSHA256")); parameters.put("SignatureVersion", urlEncode("2")); // parameters.put("SubmittedFromDate",urlEncode(submittedFromDate)); // parameters.put("SubmittedFromDate",getFormattedTimestamp()); parameters.put("Timestamp", urlEncode(timestamp)); parameters.put("Version", urlEncode("2013-09-01")); parameters.put("Action", urlEncode("ListOrders")); parameters.put("MarketplaceId",urlEncode("ATVPDKIKX0DER")); parameters.put("CreatedAfter", urlEncode("2016-05-25T10:56:00Z")); parameters.put("SellerId", urlEncode("A1VGN18HFINRY8")); parameters.put("MWSAuthToken", urlEncode("amzn.mws.b2a759cd-f24d-80f6-3cce-b543342ddd7a")); String formattedParameters = calculateStringToSignV2(parameters, serviceUrl); String signature = sign(formattedParameters, secretKey); Map<String, String> sorted = new TreeMap<String, String>(); sorted.putAll(parameters); // Add signature to the parameters and display final results parameters.put("Signature", urlEncode(signature)); System.out.println(calculateStringToSignV2(parameters, serviceUrl)); String pa = HttpUtils.prepareParam(sorted); System.out.println("url的值为:"+"https://mws.amazonservices.com/Orders/2013-09-01/?"+pa+"&Signature="+urlEncode(signature)+"\n"); try { URL url = new URL("https://mws.amazonservices.com/Orders/2013-09-01/?"+pa+"&Signature="+urlEncode(signature)); HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); conn.setConnectTimeout(50000); BufferedReader br = null; StringBuffer sbOrderResponse = new StringBuffer(); String order = ""; String str = ""; InputStream inputstream = null; if (conn.getResponseCode() != 200) { inputstream = conn.getErrorStream(); } else { inputstream = conn.getInputStream(); } br = new BufferedReader(new InputStreamReader((inputstream))); StringBuffer buffer = new StringBuffer(); while ((order = br.readLine()) != null) { sbOrderResponse.append(order); str = str + order + "\n"; } System.out.println(conn.getResponseCode() + " " + conn.getResponseMessage()); System.out.println(str); } catch (Exception e) { System.out.println("Error " + e); } } private static String calculateStringToSignV2(Map<String, String> parameters, String serviceUrl) throws SignatureException, URISyntaxException { // Sort the parameters alphabetically by storing // in TreeMap structure Map<String, String> sorted = new TreeMap<String, String>(); sorted.putAll(parameters); // Set endpoint value URI endpoint = new URI(serviceUrl.toLowerCase()); // Create flattened (String) representation StringBuilder data = new StringBuilder(); data.append("GET\n"); data.append(endpoint.getHost()); data.append("\n/Orders/2013-09-01"); // /Orders/2013-09-01 data.append("\n"); Iterator<Entry<String, String>> pairs = sorted.entrySet().iterator(); while (pairs.hasNext()) { Map.Entry<String, String> pair = pairs.next(); if (pair.getValue() != null) { data.append(pair.getKey() + "=" + pair.getValue()); } else { data.append(pair.getKey() + "="); } // Delimit parameters with ampersand (&) if (pairs.hasNext()) { data.append("&"); } } return data.toString(); } /* * Sign the text with the given secret key and convert to base64 */ private static String sign(String data, String secretKey) throws NoSuchAlgorithmException, InvalidKeyException, IllegalStateException, UnsupportedEncodingException { Mac mac = Mac.getInstance(ALGORITHM); mac.init(new SecretKeySpec(secretKey.getBytes(CHARACTER_ENCODING), ALGORITHM)); byte[] signature = mac.doFinal(data.getBytes(CHARACTER_ENCODING)); String signatureBase64 = new String(Base64.encodeBase64(signature), CHARACTER_ENCODING); return new String(signatureBase64); } private static String urlEncode(String rawValue) { String value = (rawValue == null) ? "" : rawValue; String encoded = null; try { encoded = URLEncoder.encode(value, CHARACTER_ENCODING).replace("+", "%20").replace("*", "%2A") .replace("%7E", "~"); } catch (UnsupportedEncodingException e) { System.err.println("Unknown encoding: " + CHARACTER_ENCODING); e.printStackTrace(); } return encoded; } }
java实现HTTP摘要认证
![图片说明](https://img-ask.csdn.net/upload/201907/10/1562747965_105089.png) ``` /** * 注册 * @param url * @param param * @return * @throws NoSuchAlgorithmException */ @RequestMapping("insureResponsePost") @ResponseBody public String insureResponsePost(String url, String param){ PrintWriter out = null; InputStream is = null; BufferedReader br = null; String result = ""; HttpURLConnection conn = null; StringBuffer strBuffer = new StringBuffer(); CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httppost = new HttpPost(url); httppost.addHeader("Content-Type","application/json"); httppost.setEntity(new StringEntity(param,"UTF-8")); try { URL realUrl = new URL(url); conn = (HttpURLConnection) realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestMethod( "POST"); conn.setConnectTimeout(20000); conn.setReadTimeout(300000); conn.setRequestProperty("Charset", "UTF-8"); conn.setRequestProperty( "Content-Type", "application/json"); conn.setRequestProperty( "Content-Encoding", "utf-8"); // 发送POST请求必须设置如下两行 conn.setDoOutput( true); conn.setDoInput( true); conn.setUseCaches( false); // 获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 out.print(param); // flush输出流的缓冲 out.flush(); System.out.println("======================================================================="); is = conn.getInputStream(); br = new BufferedReader( new InputStreamReader(is)); String line = null; while ((line=br.readLine())!= null) { strBuffer.append(line); } result = strBuffer.toString(); } catch (Exception e) { System. out.println( "发送 POST 请求出现异常!" + e); e.printStackTrace(); } // 使用finally块来关闭输出流、输入流 finally { try { if (out != null) { out.close(); } if (br != null) { br.close(); } if (conn!= null) { conn.disconnect(); } } catch (IOException ex) { ex.printStackTrace(); } } return result; } ``` ``` @RequestMapping("insureResponseBlockGet") @ResponseBody public String insureResponseBlockGet(String url,String username,String password,HttpUriRequest request){ HttpServletResponse response1 = null; MessageDigest md5; // String authorization = request.getHeader("Authorization"); // if (authorization != null) { // if (authorization.startsWith(DIGEST.trim())) { // HashMap<String,String> authFields = splitAuthFields(authorization.substring(7)); // String newResponse = authFields = // } // } System.out.println(username +"\n"+ password); HttpURLConnection hc = null; try { URI serverURI = request.getURI(); Credentials creds = new UsernamePasswordCredentials(username,password); hc = (HttpURLConnection)new URL(url).openConnection(); hc.setConnectTimeout(10000); hc.setReadTimeout(10000); hc.setDoInput(true); hc.setDoOutput(true); hc.setUseCaches(false); md5 = MessageDigest.getInstance("MD5"); BASE64Encoder base = new BASE64Encoder(); String ha1 = base.encode(md5.digest((username+password).getBytes("utf-8"))); String ha2 = base.encode(md5.digest(url.getBytes("utf-8"))); String response = base.encode(md5.digest((ha1+ha2).getBytes("utf-8"))); System.out.println(response); StringBuilder sb = new StringBuilder(); sb.append("Digest"); sb.append("realm").append("=\"realm\","); sb.append("qop").append("=\"auth,auth-int\","); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return ""; } ``` 以上代码只是第一次发送请求,返回401 现在不在明白第二次请求在Authorization字段给出信任书,包含认证信息 MD5加密,求大神赐教
java字符串性能的问题
<pre name="code" class="java"> package com.hhb.base; public class StringTest2 { /** * @param args */ public static void main(String[] args) { long start=System.currentTimeMillis(); String hello="Hello"; for(int i=0;i&lt;100;i++){ hello+=hello; } long end=System.currentTimeMillis(); System.out.println("String 累加消耗时间:"+(end-start)); start=System.currentTimeMillis(); StringBuffer buffer=new StringBuffer(); for(int i=0;i&lt;10;i++){ buffer.append("hello").append(i); } end=System.currentTimeMillis(); System.out.println("String 累加消耗时间:"+(end-start)); start=System.currentTimeMillis(); StringBuilder builder=new StringBuilder(); for(int i=0;i&lt;1000;i++){ builder.append("hello").append(i); } end=System.currentTimeMillis(); System.out.println("String 累加消耗时间:"+(end-start)); } } </pre> <br /> <br /><pre name="code" class="java"> Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOfRange(Arrays.java:3209) at java.lang.String.&lt;init&gt;(String.java:215) at java.lang.StringBuilder.toString(StringBuilder.java:430) at com.hhb.base.StringTest2.main(StringTest2.java:13) </pre> <br />碰到问题无解... <br />eclipse配置: <br />-startup <br />plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar <br />--launcher.library <br />plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.200.v20090519 <br />-product <br />org.eclipse.epp.package.jee.product <br />--launcher.XXMaxPermSize <br />256M <br />-showsplash <br />org.eclipse.platform <br />--launcher.XXMaxPermSize <br />256m <br />-vmargs <br />-Dosgi.requiredJavaVersion=1.5 <br />-Xms256m <br />-Xmx512m <br />-XX:+PrintGCTimeStamps <br />-XX:+PrintGCDetails <br />-verbose:gc <br />-Xloggc:gc.log <br />-XX:PermSize=96m <br />-XX:MaxPermSize=96m <br />-XX:+DisableExplicitGC <br /><br/><strong>问题补充</strong><br/><div class="quote_title">dennis_zane 写道</div><div class="quote_div">跟性能没什么关系,问题是这段代码: <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String hello="Hello";&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;100;i++){&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hello+=hello;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; <br /> <br />hello是以指数级增长的,不用99次方就撑爆内存了。 <br /></div> <br /> <br />楼主一语点醒 谢谢...
httpurlconnection上传多图片后文件流保存图片无法打开
//上传多个图片文件的APPLET public void uploadMutilFile(String []uploadFiles, String actionUrl){ String BOUNDARY = java.util.UUID.randomUUID().toString(); String PREFIX = "--", LINEND = "\r\n"; String MULTIPART_FROM_DATA = "multipart/form-data"; String CHARSET = "UTF-8"; try{ URL uri = new URL(actionUrl); HttpURLConnection conn = (HttpURLConnection) uri.openConnection(); conn.setReadTimeout(10* 1000); // 缓存的最长时间 conn.setDoInput(true);// 允许输入 conn.setDoOutput(true);// 允许输出 conn.setUseCaches(false); // 不允许使用缓存 conn.setRequestMethod("POST"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("Charsert", "UTF-8"); conn.setRequestProperty("Content-Type", "text/html"); DataOutputStream outStream = new DataOutputStream(conn.getOutputStream()); InputStream in = null; // 发送文件数据 if(uploadFiles.length>0){ for(int i=0;i<uploadFiles.length;i++){ File uploadFile = new File(uploadFiles[i]); StringBuilder sb1 = new StringBuilder(); sb1.append(PREFIX); sb1.append(BOUNDARY); sb1.append(LINEND); sb1.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + uploadFile.getName() + "\"" + LINEND); //sb1.append("Content-Type: application/octet-stream; charset=" + CHARSET + LINEND); sb1.append("Content-Type: image/jpeg"+ LINEND); sb1.append(LINEND); System.out.println(sb1.toString()); outStream.writeBytes(sb1.toString()); FileInputStream is = new FileInputStream(uploadFile); byte[] buffer = new byte[(int)uploadFile.length()]; int len = 0; while ((len = is.read(buffer)) != -1) { outStream.write(buffer, 0, len); } outStream.write(LINEND.getBytes()); is.close(); } // 请求结束标志 outStream.writeBytes(PREFIX + BOUNDARY + PREFIX + LINEND); outStream.flush(); outStream.close(); // 得到响应码 int res = conn.getResponseCode(); if (res == 200) { in = conn.getInputStream(); int ch; StringBuilder sb2 = new StringBuilder(); while ((ch = in.read()) != -1) { sb2.append((char) ch); } System.out.println(sb2.toString()); } conn.disconnect(); } }catch(Exception e){ e.printStackTrace(); } } //调用的ACTION public String SaveImgAction(){ request = ServletActionContext.getRequest(); /*try{ ServletInputStream mRead = request.getInputStream(); byte[] bytes = new byte[1024]; int len = mRead.read(bytes,0,1024); StringBuffer str = new StringBuffer(); while(len != -1){ String str1 = new String(bytes,0,1024); str.append(str1); len = mRead.read(bytes,0,1024); } System.out.println(new String(str.toString().getBytes(),"UTF-8")); }catch(Exception e){ e.printStackTrace(); }*/ try{ int totalbytes = request.getContentLength(); byte[] dataOrgin = new byte[totalbytes]; byte[] b = new byte[totalbytes]; Map<String,byte[]>mapfile = new HashMap<String , byte[]>(); DataInputStream in = new DataInputStream(request.getInputStream()); in.readFully(dataOrgin); in.close(); String reqcontent = new String(dataOrgin); BufferedReader reqbuf = new BufferedReader(new StringReader(reqcontent)); String s = reqbuf.readLine(); String startStr = s; System.out.println(s); String fname=""; while((s=reqbuf.readLine())!=null){ if(s.startsWith("Content-Disposition")){ String filename = s.substring(s.indexOf("filename=")+"filename=".length()+1,s.length()-1); fname = filename; } if(s.startsWith("Content-Type")){ s= reqbuf.readLine(); s=reqbuf.readLine(); System.out.println(s.getBytes().length); File f = new File("E:"+File.separator+fname); DataOutputStream fileout = new DataOutputStream(new FileOutputStream(f)); byte []arr = s.getBytes(); fileout.write(s.getBytes()); fileout.close(); //mapfile.put(fname, arr); } if(s.startsWith(startStr+"--")){ System.out.println("结束"); break; } } }catch(Exception e){ e.printStackTrace(); } return null; } 通过JS调用applet方法 <script type="text/javascript"> function fz(){ var arr=[]; arr[0]="D:\\test3.jpg"; arr[1]="D:\\test4.jpg"; var str = "http://192.168.253.61:7001/TestProject/saveImg.action"; document.appTest.uploadMutilFile(arr , str); } </script> 结果:上传的文件大小跟ACTION获取保存到服务器上的文件大小不一样,无法打开。各位大侠帮忙看看啊
怎么请求聚合数据的数据,求一个demo,谢谢各位大神
我自己做的请求不出来数据,下面上一个类的代码。请大神指点指点 package com.action; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; import org.apache.commons.httpclient.util.HttpURLConnection; import net.sf.json.JSONObject; import android.app.Activity; import android.os.*; import android.view.*; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class Hanziqigua extends Activity{ /***********************/ public static final String DEF_CHATSET = "UTF-8"; public static final int DEF_CONN_TIMEOUT = 30000; public static final int DEF_READ_TIMEOUT = 30000; public static String userAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"; String url ="http://v.juhe.cn/xhzd/query";//请求接口地址 /***********************/ private EditText hzText; private Button hzStartbt; private TextView hzTextBegin; public static final String APPKEY ="4e60f85fda2216b3d39f106204bb8c3d"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.hanziqigua_layout); /***控件初始化*/ hzText = (EditText) findViewById(R.id.hzText); hzStartbt = (Button) findViewById(R.id.hzStartbt); hzTextBegin = (TextView) findViewById(R.id.hzTextBegin); /***/ hzStartbt.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { /***拆分字符串*/ String textBegin=hzText.getText().toString(); final String textBeginOne=textBegin.substring(0,1); final String textBeginTwo=textBegin.substring(1,2); /***/ System.out.println("第一个字 -->"+textBeginOne); System.out.println("第二个字 -->"+textBeginTwo); /***********/ /***********网络请求****************/ /***********第一个字的地址**********/ final String newUrlone = url + "?" + "key=" + APPKEY + "&" + "word=" + textBeginOne; System.out.println("new url -- > "+ newUrlone); /***********************************/ /***********第二个字的地址***********/ final String newUrltwo = url + "?" + "key=" + APPKEY + "&" + "word=" + textBeginOne; System.out.println("new url -- > "+ newUrltwo); /***********************************/ String result =null; String url ="https://v.juhe.cn/xhzd/query";//请求接口地址 Map params = new HashMap();//请求参数 params.put("word",newUrlone);//填写需要查询的汉字,UTF8 urlencode编码 params.put("key",APPKEY);//应用APPKEY(应用详细页查询) params.put("dtype","");//返回数据的格式,xml或json,默认json try { result =net(url, params, "GET"); JSONObject object = JSONObject.fromObject(result); if(object.getInt("error_code")==0){ System.out.println(object.get("result")); }else{ System.out.println(object.get("error_code")+":"+object.get("reason")); } } catch (Exception e) { e.printStackTrace(); } /***********************************/ } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } /**************************************************************************************/ /** * * @param strUrl 请求地址 * @param params 请求参数 * @param method 请求方法 * @return 网络请求字符串 * @throws Exception */ public static String net(String strUrl, Map params,String method) throws Exception { HttpURLConnection conn = null; BufferedReader reader = null; String rs = null; try { StringBuffer sb = new StringBuffer(); if(method==null || method.equals("GET")){ strUrl = strUrl+"?"+urlencode(params); } URL url = new URL(strUrl); conn = (HttpURLConnection) url.openConnection(); if(method==null || method.equals("GET")){ conn.setRequestMethod("GET"); }else{ conn.setRequestMethod("POST"); conn.setDoOutput(true); } conn.setRequestProperty("User-agent", userAgent); conn.setUseCaches(false); conn.setConnectTimeout(DEF_CONN_TIMEOUT); conn.setReadTimeout(DEF_READ_TIMEOUT); conn.setInstanceFollowRedirects(false); conn.connect(); if (params!= null && method.equals("POST")) { try { DataOutputStream out = new DataOutputStream(conn.getOutputStream()); out.writeBytes(urlencode(params)); } catch (Exception e) { // TODO: handle exception } } InputStream is = conn.getInputStream(); reader = new BufferedReader(new InputStreamReader(is, DEF_CHATSET)); String strRead = null; while ((strRead = reader.readLine()) != null) { sb.append(strRead); } rs = sb.toString(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { reader.close(); } if (conn != null) { conn.disconnect(); } } return rs; } //将map型转为请求参数型 public static String urlencode(Map<String,Object>data) { StringBuilder sb = new StringBuilder(); for (Map.Entry i : data.entrySet()) { try { sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return sb.toString(); } /**************************************************************************************/ }
一般微信公众平台素材管理是怎么做的?
总感觉微信素材管理上传素材的的接口不太给力,还得实用curl,在web中,使用 HttpURLConnection上传图片可以,语音和视频总是上传不成功,求解答!! ``` RL url = new URL(uploadMediaUrl); String result = null; File file = new File(mediaFileUrl); if (!file.exists() || !file.isFile()) { System.out.println("上传的文件不存在"); } String filename = file.getName(); HttpURLConnection con = (HttpURLConnection)url.openConnection(); con.setRequestMethod("POST"); // 以Post方式提交表单,默认get方式 con.setDoInput(true); con.setDoOutput(true); con.setUseCaches(false); // post方式不能使用缓存 // 设置请求头信息 con.setRequestProperty("Connection", "Keep-Alive"); con.setRequestProperty("Charset", "UTF-8"); // 设置边界 String BOUNDARY = "----------" + System.currentTimeMillis(); con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY); // 请求正文信息 // 第一部分: StringBuilder sb = new StringBuilder(); sb.append("--"); // 必须多两道线 sb.append(BOUNDARY); sb.append("\r\n"); /***********************************/ sb.append("Content-Disposition: form-data;name=\"type\" \r\n\r\n"); sb.append(type); sb.append("\r\n--"); // 必须多两道线 sb.append(BOUNDARY); sb.append("\r\n"); if("video".equals(type)){ sb.append("Content-Disposition: form-data;name=\"description\" \r\n\r\n"); sb.append("{\"title\":\"hello title\",\"introduction\":\"hello introduction\"}"); sb.append("\r\n--"); // 必须多两道线 sb.append(BOUNDARY); sb.append("\r\n"); } /***********************************/ sb.append("Content-Disposition: form-data;type=\""+type+"\";name=\"media\";filename=\"" + filename + "\" \r\n"); sb.append("Content-Type:application/octet-stream\r\n\r\n"); System.out.println(sb.toString()); byte[] head = sb.toString().getBytes("utf-8"); // 获得输出流 out = new DataOutputStream(con.getOutputStream()); // 输出表头 out.write(head); // 文件正文部分 // 把文件已流文件的方式 推入到url中 in = new DataInputStream(new FileInputStream(file)); int bytes = 0; byte[] bufferOut = new byte[1024]; while ((bytes = in.read(bufferOut)) != -1) { out.write(bufferOut, 0, bytes); } in.close(); // 结尾部分 byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定义最后数据分隔线 out.write(foot); out.flush(); out.close(); StringBuffer buffer = new StringBuffer(); // 定义BufferedReader输入流来读取URL的响应 reader = new BufferedReader(new InputStreamReader(con.getInputStream())); String line = null; while ((line = reader.readLine()) != null) { buffer.append(line); } if (result == null) { result = buffer.toString(); } ```
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
Vue + Spring Boot 项目实战(十四):用户认证方案与完善的访问拦截
本篇文章主要讲解 token、session 等用户认证方案的区别并分析常见误区,以及如何通过前后端的配合实现完善的访问拦截,为下一步权限控制的实现打下基础。
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
漫话:什么是平衡(AVL)树?这应该是把AVL树讲的最好的文章了
这篇文章通过对话的形式,由浅入深带你读懂 AVL 树,看完让你保证理解 AVL 树的各种操作,如果觉得不错,别吝啬你的赞哦。 1、若它的左子树不为空,则左子树上所有的节点值都小于它的根节点值。 2、若它的右子树不为空,则右子树上所有的节点值均大于它的根节点值。 3、它的左右子树也分别可以充当为二叉查找树。 例如: 例如,我现在想要查找数值为14的节点。由于二叉查找树的特性,我们可...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
开源并不是你认为的那些事
点击上方蓝字 关注我们开源之道导读所以 ————想要理清开源是什么?先要厘清开源不是什么,名正言顺是句中国的古代成语,概念本身的理解非常之重要。大部分生物多样性的起源,...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
《C++ Primer》学习笔记(六):C++模块设计——函数
专栏C++学习笔记 《C++ Primer》学习笔记/习题答案 总目录 https://blog.csdn.net/TeFuirnever/article/details/100700212 —————————————————————————————————————————————————————— 《C++ Primer》习题参考答案:第6章 - C++模块设计——函数 文章目录专栏C+...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车?某胡同口的煎饼摊一年能卖出多少个煎饼?深圳有多少个产品经理?一辆公交车里能装下多少个乒乓球?一个正常成年人有多少根头发?这类估算问题,被称为费米问题,是以科学家费米命名的。为什么面试会问这种问题呢?这类问题能把两类人清楚地区分出来。一类是具有文科思维的人,擅长赞叹和模糊想象,它主要依靠的是人的第一反应和直觉,比如小孩...
so easy! 10行代码写个"狗屁不通"文章生成器
前几天,GitHub 有个开源项目特别火,只要输入标题就可以生成一篇长长的文章。 背后实现代码一定很复杂吧,里面一定有很多高深莫测的机器学习等复杂算法 不过,当我看了源代码之后 这程序不到50行 尽管我有多年的Python经验,但我竟然一时也没有看懂 当然啦,原作者也说了,这个代码也是在无聊中诞生的,平时撸码是不写中文变量名的, 中文...
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的回答,对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalking,作者吴晟、刘浩杨 等等 仓库地址: apache/skywalking 更...
相关热词 c# 输入ip c# 乱码 报表 c#选择结构应用基本算法 c# 收到udp包后回包 c#oracle 头文件 c# 序列化对象 自定义 c# tcp 心跳 c# ice连接服务端 c# md5 解密 c# 文字导航控件
立即提问