strings - Unintended Recursion

博客给出Java异常示例,解决方案是使用super.toString()替代this,还给出输出情况,并列出参考资料,包括《On Java 8 - Bruce Eckel》及相关GitHub链接。

 

// strings/InfiniteRecursion.java
// (c)2017 MindView LLC: see Copyright.txt
// We make no guarantees that this code is fit for any purpose.
// Visit http://OnJava8.com for more book information.
// Accidental recursion
// {ThrowsException}
// {VisuallyInspectOutput} Throws very long exception

import java.util.*;
import java.util.stream.*;

public class InfiniteRecursion {
  @Override
  public String toString() {
    return " InfiniteRecursion address: " + this + "\n";// Throws very long exception
  }

  public static void main(String[] args) {
    Stream.generate(InfiniteRecursion::new).limit(10).forEach(System.out::println);
  }
}

the exception example is 

…………………………………………
        at java.lang.StringBuilder.append(StringBuilder.java:131)
        at InfiniteRecursion.toString(InfiniteRecursion.java:15)
        at java.lang.String.valueOf(String.java:2994)
        at java.lang.StringBuilder.append(StringBuilder.java:131)
        at InfiniteRecursion.toString(InfiniteRecursion.java:15)

        at java.lang.String.valueOf(String.java:2994)
        at java.lang.StringBuilder.append(StringBuilder.java:131)
        at InfiniteRecursion.toString(InfiniteRecursion.java:15)

The solution is using super.toString() instead of this.

then it outputs

 InfiniteRecursion address: InfiniteRecursion@1b28cdfa

 InfiniteRecursion address: InfiniteRecursion@eed1f14

 InfiniteRecursion address: InfiniteRecursion@7229724f

 InfiniteRecursion address: InfiniteRecursion@4c873330

 InfiniteRecursion address: InfiniteRecursion@119d7047

 InfiniteRecursion address: InfiniteRecursion@776ec8df


 InfiniteRecursion address: InfiniteRecursion@4eec7777

 InfiniteRecursion address: InfiniteRecursion@3b07d329

 InfiniteRecursion address: InfiniteRecursion@41629346

 InfiniteRecursion address: InfiniteRecursion@404b9385

 

references:

1. On Java 8 - Bruce Eckel

2. https://github.com/wangbingfeng/OnJava8-Examples/blob/master/strings/InfiniteRecursion.java

### 使用 `strings` 命令的 `-f` 选项 在 Linux 系统中,`strings` 命令用于从二进制文件或其他非文本文件中提取可打印的字符串。`-f` 选项会为每个输出的字符串附加文件名[^3]。这在处理多个文件时非常有用,可以清楚地知道每个字符串来自哪个文件。 以下是使用 `strings` 命令及其 `-f` 选项的详细说明和示例: #### 基本语法 ```bash strings [选项] 文件名 ``` #### `-f` 选项的用法 当指定 `-f` 选项时,`strings` 会在每个字符串前打印文件名。如果需要更紧凑的输出,可以结合 `-n` 选项来设置最小字符串长度。 #### 示例代码 以下是一个简单的示例,展示如何使用 `-f` 选项: ```bash # 创建一个包含可打印字符串的二进制文件 echo "Hello, World!" > example.bin # 使用 strings 命令并启用 -f 选项 strings -f example.bin ``` 运行上述命令后,输出将类似于以下内容: ``` example.bin: Hello, World! ``` #### 结合其他选项 可以与其他选项一起使用以增强功能。例如,使用 `-n` 指定最小字符串长度: ```bash strings -f -n 5 example.bin ``` 此命令只会输出长度至少为 5 的字符串,并附带文件名。 #### 注意事项 1. 如果没有指定文件名,`strings` 默认从标准输入读取数据。 2. 对于大型文件或目录中的多个文件,建议结合 `find` 或 `xargs` 命令使用。 ```bash find /path/to/files -type f -exec strings -f {} \; ``` 此命令会递归查找指定路径下的所有文件,并对每个文件运行 `strings -f`。 ### 相关工具 `strings` 命令通常与 `grep` 配合使用,以便过滤出特定的字符串[^3]。例如: ```bash strings -f /path/to/binary | grep "specific-pattern" ``` 此命令会从二进制文件中提取所有字符串,并仅显示包含 `"specific-pattern"` 的行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值