小编jon*_*rry的帖子

在Java中从文件中完全读取对象流的最佳方法是什么?

我正在创建一个可能很长的对象日志,并且不希望在写入文件之前将它们全部保存在内存中,因此我无法将对象的序列化集合写入文件.我正在尝试在完成日志记录后找出整个对象流中的"最佳"读取方式.

我注意到以下内容不起作用:

FileInputStream fis = new FileInputStream(log);
ObjectInputStream in = new ObjectInputStream(fis);
while ((obj = in.readObject()) != null) {
  // do stuff with obj
}
Run Code Online (Sandbox Code Playgroud)

因为流在到达文件末尾时抛出异常而不是返回null(可能是因为可以向对象流写入/读取null,导致上述循环不按预期运行).

有没有更好的方法来完成我想用上面的循环完成的事情:

FileInputStream fis = new FileInputStream(log);
ObjectInputStream in = new ObjectInputStream(fis);
try {
  while (true) {
    obj = in.readObject();
    // do stuff with obj
  }
} catch (EOFException e) {
}
Run Code Online (Sandbox Code Playgroud)

这看起来有点笨拙.对于文件结束对象解决方案,以下是最佳方法吗?

private static final class EOFObject implements Serializable {
  private static final long serialVersionUID = 1L;
}

void foo() {
  Object obj;
  while …
Run Code Online (Sandbox Code Playgroud)

java serialization

3
推荐指数
1
解决办法
3571
查看次数

从unix命令行连接两个文件的最简单方法,为缺少的键插入零条目

我正在尝试连接两个文件,每个文件包含表单的行<key> <count>.每个文件包含一些从另一个文件中缺失的行,我想为所有这些值插入零而不是省略这些行(我见过-a,但这不是我想要的).有没有一种简单的方法来实现这一目标?

以下是一些示例输入:

A.TXT

apple 5
banana 7
Run Code Online (Sandbox Code Playgroud)

b.txt

apple 6
cherry 4
Run Code Online (Sandbox Code Playgroud)

预期产量:

apple 5 6
banana 7 0
cherry 0 4
Run Code Online (Sandbox Code Playgroud)

unix join

3
推荐指数
1
解决办法
1229
查看次数

没有ssh主机的输出"awk'{print $ 0}'/ path/to/log.txt"

我正在尝试使用awk从远程机器上的日志中提取一些数据,并注意到如果我进入机器运行并运行

awk '{print $0}' /path/to/log.txt
Run Code Online (Sandbox Code Playgroud)

我得到了预期的输出(包含日志消息,堆栈跟踪等),但是如果我运行的话

ssh host "awk '{print $0}' /path/to/log.txt"
Run Code Online (Sandbox Code Playgroud)

然后输出如下所示:

0
1
0
0
1
1
1
1
1
1
Run Code Online (Sandbox Code Playgroud)

任何想法为什么会这样?

ssh awk

3
推荐指数
2
解决办法
4992
查看次数

Eclipse格式化程序行断开赋值和方法调用

有没有办法我可以配置eclipse,通过将'='放在一个新行上来避免打破长任务,并避免打破'.' 方法调用的字符.我注意到了一些设置,例如:

<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
Run Code Online (Sandbox Code Playgroud)

可以添加到可用于指定格式的xml文件中,但我不确定应该更改哪些设置以获得所需的效果.这些配置是否记录在某处(我尝试使用谷歌搜索一些相关的条款无济于事).

eclipse

3
推荐指数
1
解决办法
1451
查看次数

ssh主机的历史记录| 尾巴'不产生任何输出

谁能解释以下内容?当我使用ssh远程执行历史记录时,不会产生任何输出,甚至其他远程命令也会产生输出,并且该计算机上存在历史记录。

ssh host 'history | tail' # produces no output
ssh host 'echo foo | tail' # produces 'foo' as output
ssh host
> history | tail # produces expected output
Run Code Online (Sandbox Code Playgroud)

ssh bash

3
推荐指数
1
解决办法
1072
查看次数

使html表可编辑,并在该行中的文本更改时启用每行按钮

我有一个html表,如下所示:

    <table id="tree">
        <tr id="foo-1">
            <td>fooId1</td>
            <td>fooName1</td>
            <td>fooCsv1</td>
            <td><button id="button-1" type="button" disabled>Save</button></td>
        </tr>
        <tr id="foo-2">
            <td>fooId2</td>
            <td>fooName2</td>
            <td>fooCsv2</td>
            <td><button id="button-2" type="button" disabled>Save</button></td>
        </tr>
    </table>
Run Code Online (Sandbox Code Playgroud)

我想对这个表做两个修改:

- 首先,我想让fooName和fooCsv td元素可编辑(实际上有几个可编辑的列,但我只是用两个来使这个例子更简单).我知道我可以简单地在td元素中放入一个输入并设置值,但是想知道是否有更简单的方法.

- 其次,当用户通过键入/ copy-paste/etc更改该行中的文本时,我希望每行中的"保存"按钮变为启用状态.我用google搜索并发现我可以通过为输入事件添加处理程序来做到这一点,但我不确定最简单的方法来合并它,我不确定它是否有第一个分支我的任务.

如果我对html和javascript了解很多,我认为这应该很容易,但我不知道,所以有人知道一个简单的方法来实现我想要做的事情吗?

html javascript

3
推荐指数
1
解决办法
1万
查看次数

在 Scala 中调用属于泛型类型的“静态”方法

Scala 中有没有办法调用属于某个类型的方法?例如,假设我有一个叫做 trait 的特性Constructable,它描述了类型,而不是可以构造它们自己的默认实例。然后,我可以编写以下代码:

  trait Constructable[A] {
    def construct: A
  }

  class Foo(x: Int) extends Constructable[Foo] {
    def construct = new Foo(0)
  }

  def main(args: Array[String]) {
    val f = new Foo(4)
    println(f.construct)
  }
Run Code Online (Sandbox Code Playgroud)

这没问题,但我真正想要的是能够构造一个仅给定对象类型的默认对象。例如,假设我想接受一个可构造的列表并在列表的开头添加一个默认对象:

  def prependDefault1[A <: Constructable[A]](c: List[A]): List[A] = {
    val h = c.head
    h.construct :: c
  }
Run Code Online (Sandbox Code Playgroud)

上面的代码有效,但前提是 c 不为空。我真正想要的是写如下内容:

  def prependDefault2[A <: Constructable[A]](c: List[A]): List[A] = {
    A.construct :: c
  }
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这一点,可能是通过更改 a 的定义,Constructable使该construct方法属于“类”而不是“实例”(使用 Java 术语)?

scala

3
推荐指数
1
解决办法
2150
查看次数

如何在java或scala中获取localhost网络接口

我正在尝试在scala应用程序中获取我的机器的MAC地址.搜索时有几个结果,但它们都使用如下所示的内容,InetAddress.getLocalHost()后面跟着NetworkInterface.getByInetAddress(...):使用Java在本地计算机上获取MAC地址

我的问题是结果最终为null:

val localhost = InetAddress.getLocalHost
println(s"lh: $localhost")
val localNetworkInterface = NetworkInterface.getByInetAddress(localhost)
println(s"lni: $localNetworkInterface")

>>lh: ubuntu/127.0.1.1
>>lni: null
Run Code Online (Sandbox Code Playgroud)

java scala

3
推荐指数
1
解决办法
1613
查看次数

获取boto.exception.S3ResponseError:S3ResponseError:403上传文件时禁止访问

关于这个问题还有一些其他问题:

boto.exception.S3ResponseError:S3ResponseError:403禁止

S3ResponseError:S3ResponseError:403 Forbidden

S3ResponseError:403禁止使用boto

Python:Amazon S3无法获得桶:403 Forbidden说

然而,似乎我可能遇到了不同的问题(例如,时钟偏差不是问题,我已经尝试过设置validate=False,我相信我有正确的密钥和密钥,因为尝试伪造密钥或秘密密钥会给我不同的错误) .这是我的脚本:

import boto
import sys
from boto.s3.key import Key

BUCKET_NAME = sys.argv[1]
AWS_ACCESS_KEY_ID = sys.argv[2]
AWS_SECRET_ACCESS_KEY = sys.argv[3]

conn = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
bucket = conn.get_bucket(BUCKET_NAME, validate=False)
k = Key(bucket)
k.key = 'barbaz'
k.set_contents_from_filename('/tmp/barbaz.txt')
Run Code Online (Sandbox Code Playgroud)

结果如下:

Traceback (most recent call last):
  File "/home/jonderry/sdmain/src/scripts/jenkins/upload_to_s3.py", line 16, in <module>
    k.set_contents_from_filename('/tmp/barbaz.txt')
  File "/usr/local/lib/python2.7/dist-packages/boto/s3/key.py", line 1360, in set_contents_from_filename
    encrypt_key=encrypt_key)
  File "/usr/local/lib/python2.7/dist-packages/boto/s3/key.py", line 1291, in set_contents_from_file
    chunked_transfer=chunked_transfer, size=size)
  File "/usr/local/lib/python2.7/dist-packages/boto/s3/key.py", line 748, in send_file
    chunked_transfer=chunked_transfer, size=size) …
Run Code Online (Sandbox Code Playgroud)

python amazon-s3 boto

3
推荐指数
1
解决办法
1万
查看次数

如何编写脚本以在后台运行多个进程,并在每个单独的命令完成后运行其他命令?

我正在尝试在bash脚本中执行以下操作:

for x in a b c; do echo foo $x; sleep 5 & y=$! ; (wait $y && echo bar $x) & done
Run Code Online (Sandbox Code Playgroud)

这有可能,而不会增加太多的复杂性(上面的例子当然不起作用)?

编辑:

当然,实际上,echo foo $x; sleep 5例如,复制一些大文件或编译大的东西,第二个操作将是依赖于第一个的操作.

linux bash scripting

2
推荐指数
1
解决办法
147
查看次数

标签 统计

bash ×2

java ×2

scala ×2

ssh ×2

amazon-s3 ×1

awk ×1

boto ×1

eclipse ×1

html ×1

javascript ×1

join ×1

linux ×1

python ×1

scripting ×1

serialization ×1

unix ×1