nieyuanhong 最近的时间轴更新
nieyuanhong

nieyuanhong

V2EX 第 335631 号会员,加入于 2018-07-25 09:02:40 +08:00
今日活跃度排名 4795
nieyuanhong 最近回复了
每天下班打开 boss 直聘开刷呗, 骑驴找马
不退押金? 直接洗衣机空调全给他卖了, 马桶砸了, 下水道全用水泥堵了, 玩的就是一手鱼死网破.
119 天前
回复了 javak 创建的主题 Java Java hello world 确实就要占用 30M
dO yOu GuYs NoT hAvE mEmOrY?
这段代码应当改为
```java
CallSite applyAsInt = LambdaMetafactory.metafactory(
lookup.in(Phone.class),
"applyAsInt",
methodType(ToIntFunction2.class),
methodType(int.class, Phone.class, int.class, int.class),
getSum,
methodType(int.class, Phone.class, int.class, int.class)
);
```
因为调用 metafactory 方法时, 方法内部初步生成的 Lambda 字节码会被作为 lookup.in(Phone.class)的内部类加载, 加载时, 会调用方法 java.lang.invoke.InnerClassLambdaMetafactory#generateInnerClass, 具体逻辑形如
```java
//jdk21
return caller.makeHiddenClassDefiner(lambdaClassName, classBytes, Set.of(NESTMATE, STRONG), lambdaProxyClassFileDumper)
.defineClass(!disableEagerInitialization, classdata);
```
在 defineClass 中逻辑形如
```java
//jdk21
Class<?> lookupClass = lookup.lookupClass();
ClassLoader loader = lookupClass.getClassLoader();
//...
```
这里的第一句 lookup.lookupClass() 获取的就是 metafactory 的第一个参数 lookup.in(Phone.class)中的 Phone.class, 如果用原始的 lookup 的话, 会获取到 Object.class, 显然 Object 的 classloader 会找不到 Phone.class, 但是可以找到其他和它位于同个 classloader 中的类, 比如 String.class.
@gzlt 感谢感谢,辛苦了
这个历史聊天记录可以找回来吗?感觉上次对答状态很好,但是关了之后聊天记录找不到了。
2023-04-10 02:51:05 +08:00
回复了 Ujob2022 创建的主题 酷工作 赴日 IT!自研、派遣招聘大量 IT 技术者!
@LcDraven 当然啦,现在行情就是在缅北分块打包再运往世界各地。
2023-01-17 14:17:11 +08:00
回复了 abcbuzhiming 创建的主题 Java [请教]String 的 new String(Byte[]) 和 getByte() 转换的理解不能
这个直接跟踪源码就理解了,比如 windows 下默认 gbk ,其他系统可能默认 utf-8 ,这些字符集都有一个重解析的问题。
具体来说就是解析时,有些 byte 组合是没有对应的字符的,而有些 byte 组合直接不符合编码标准,所以这些组合会被解析后映射到乱码字符。
这样经过转换为字符又转回数组,长度和值当然会不一样了。
要想保证这样两次解析不破坏信息,建议的方式是指定字符集解析为 iso8859-1 ,而为什么要选它呢?因为它仅有的 256 个字符和 byte 的 256 个值是严格一一对应的,这样无论如何互转,都不会产生映射混乱。

楼主可以自己试一试。

```java
var a1 = new byte[64];
new Random().nextBytes(a1); // 获取一些随机 byte 以供测试
System.out.println("a1:" + Base64.getEncoder().encodeToString(a1));
var tmp = new String(a1, StandardCharsets.ISO_8859_1);
System.out.println("a2:" + Base64.getEncoder().encodeToString(tmp.getBytes(StandardCharsets.ISO_8859_1)));

```
2022-12-18 03:33:41 +08:00
回复了 yazinnnn 创建的主题 Java 2022 年冬月, Java 后端工程师拒绝使用 kotlin 的技术原因有哪些?
@GTim 如果 Lombok 不够,比如需要运算符重载,元编程,扩展方法,那就上 manifold https://github.com/manifold-systems/manifold
2022-12-18 03:28:58 +08:00
回复了 iSNN 创建的主题 Java Java 怎么去掉这些奇怪的字符
感觉列举的例子有点少,你需要分析 abc 后边的奇怪字符的 ASCII 码,确定这些奇怪字符的码位范围,范围确定后就好办了,直接正则移除掉。当然如果奇怪的字符包括标点符号和英文字母以及汉字的话,就只能从前端找办法了。
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2527 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 11ms · UTC 15:46 · PVG 23:46 · LAX 07:46 · JFK 10:46
Developed with CodeLauncher
♥ Do have faith in what you're doing.