他隐藏的最深!!白夜行中的秋吉雄一!!!

本文深入探讨了东野圭吾小说《白夜行》中一个看似微不足道的角色——秋吉雄一的重要性。通过对雄一与主角亮司之间关系的细致分析,揭示了雄一在故事中的真正作用及其对情节发展的微妙影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

秋吉雄一,这样一个看过便会被人遗忘的人物,在我看来却是本书中作者暗示的手法运用的最为诡异最为成功的一处。
纵观雄一,从出场时偷拍雪穗,到被小流氓牟田一伙殴打退场,说他只是为了引出松浦和亮司母亲照片事件以及藤村都子遇袭事件而存在也不为过。
就是这样一个微不足道的角色,在亮司隐姓埋名,需要另一个身份时,他的名字,秋吉雄一,被亮司选中,并一直用到故事结束。
亮司为什么会选中雄一的名字呢?为什么不是菊池?不是牟田?只是巧合么?这看似不起眼的一个小小的细节,若是换到作者东野的角度来推理,将会发现意想不到的秘密,不得不叹服与东野此处精彩的伏笔与暗示。
那么,东野在雄一这个人物上隐藏了哪些秘密?有些什么需要我们发掘的?
请注意东野对雄一对所拍相片的处理细节的描写:“当晚吃过饭,雄一便躲进房间冲洗白天拍的照片。要在房里冲洗照片,只要在充当暗房的壁橱里把底片放进专用容器,接下来的步骤便可以在明亮的地方进行。显像完成后,他从容器里取出底片,到一楼的洗脸台冲水。原本应当以流动的水冲泡一个晚上,但妈妈看到一定会唠叨,雄一对此再清楚不过。冲到一半,雄一透过日光灯察看底片。确认唐泽雪穗头发的光泽呈现出清晰的阴影,他感到很满足。他有把握——没问题,顾客一定会满意。”
从上述描写,可以得到这样的信息:
1:洗相片需要暗房,或者代替暗房的黑暗的空间。
2:需要专用容器,具体是什么,东野没交代清楚,我们暂时先不去追究。
3:需要用水冲相当长的一段时间。
可以看出来,洗相片并不是一件很简单很平常的事,需要一定的技术。
下面我们先将雄一和他的洗相片技术放到一边,分析下藤村都子与江利子两人的遇袭事件。
两人的事件有很多相似之处,但不同之处也很多,举一个很明显的例子,在藤村都子的事件中没有相片,而江利子事件中,则有相片作为证据送到了一成手里。
江利子遇袭事件,亮司当然是不容置疑的实施者。相信几乎所有人都认为是亮司单独进行,但真相是这样么?
回顾藤村都子遇袭前后,直到雄一被牟田教训,雄一与亮司之间只是普通的同学关系,这点可以确定无疑。而江利子遇袭时,雄一和亮司的关系如何?东野毫无提及,我当然也不好揣测。
所以,我只能认为江利子遇袭时,拍照人和洗照片的人都是亮司。
现在,来看亮司是否有拍照和洗照片的条件呢?
1:洗照片的暗房。结合全文,在江利子遇袭的那段时间,亮司已经离家出走,单独居住,这点条件没问题。
2:专用容器。这点要想在字面上分析清楚,很难。但推理的话,雄一可以有这样的专用容器,比雄一智商高很多的亮司有的话,大多数人不会太过意外。
3:用水冲相当长的一段时间。这点没什么问题。
首先,江利子遇袭被拍的照片亮司拿到照相馆去洗相的可能性是绝对不成立的,这是对亮司智商的侮辱。那么,照以上的条件分析,亮司单独实施江利子遇袭事件并拍照,洗相,送出相片,是绝对成立的,读者没有人会怀疑。起码,在目前是这样。
然而,随着整个故事情节的铺开,亮司化名为秋吉雄一,接近栗原典子,骗取了一小瓶氰化钾用于对付今枝时,我突然感觉到哪里不对劲。
是的,我感觉不对劲的地方来自与氰化钾。
在东野描写雄一洗相片时很狡猾地隐藏了一点关键性的东西:“只要在充当暗房的壁橱里把底片放进专用容器”,东野只是提到了专用容器,那么,溶液呢?用来显影的溶液,主要成分的化学名称是KCN,也就是氰化钾,那个亮司费尽心机从典子那里骗取了一小瓶的——氰化钾。
现在,我们可以惊奇地得到一条结论:亮司根本就不懂得洗相,否则想要获取氰化钾,用得着这么费劲么?
最后,让我们回到江利子遇袭的现场。在江利子昏迷后,拍照人和洗照片的人,是谁?
毫无疑问,只有一个人能做到:秋吉雄一。
那么,秋吉雄一又是如何会帮助亮司,与亮司又是怎样的关系?东野一个字也没提。但他安排的“秋吉雄一”作为被亮司选中的名字来看,耐人寻味,有着巨大的想像空间。
如果说园村友彦是亮司早期在台面上的帮手,那么,秋吉雄一就是在亮司背后那个隐藏的,从不露面的另一个黑暗伙伴,或者,是已经被亮司彻底送入黑暗的伙伴。
/* * 基于双向链表实现双端队列结构 */ package dsa; public class Deque_DLNode implements Deque { protected DLNode header;//指向头节点(哨兵) protected DLNode trailer;//指向尾节点(哨兵) protected int size;//队列中元素的数目 //构造函数 public Deque_DLNode() { header = new DLNode(); trailer = new DLNode(); header.setNext(trailer); trailer.setPrev(header); size = 0; } //返回队列中元素数目 public int getSize() { return size; } //判断队列是否为空 public boolean isEmpty() { return (0 == size) ? true : false; } //取首元素(但不删除) public Object first() throws ExceptionQueueEmpty { if (isEmpty()) throw new ExceptionQueueEmpty("意外:双端队列为空"); return header.getNext().getElem(); } //取末元素(但不删除) public Object last() throws ExceptionQueueEmpty { if (isEmpty()) throw new ExceptionQueueEmpty("意外:双端队列为空"); return trailer.getPrev().getElem(); } //在队列前端插入新节点 public void insertFirst(Object obj) { DLNode second = header.getNext(); DLNode first = new DLNode(obj, header, second); second.setPrev(first); header.setNext(first); size++; } //在队列后端插入新节点 public void insertLast(Object obj) { DLNode second = trailer.getPrev(); DLNode first = new DLNode(obj, second, trailer); second.setNext(first); trailer.setPrev(first); size++; } //删除首节点 public Object removeFirst() throws ExceptionQueueEmpty { if (isEmpty()) throw new ExceptionQueueEmpty("意外:双端队列为空"); DLNode first = header.getNext(); DLNode second = first.getNext(); Object obj = first.getElem(); header.setNext(second); second.setPrev(header); size--; return(obj); } //删除末节点 public Object removeLast() throws ExceptionQueueEmpty { if (isEmpty()) throw new ExceptionQueueEmpty("意外:双端队列为空"); DLNode first = trailer.getPrev(); DLNode second = first.getPrev(); Object obj = first.getElem(); trailer.setPrev(second); second.setNext(trailer); size--; return(obj); } //遍历 public void Traversal() { DLNode p = header.getNext(); while (p != trailer) { System.out.print(p.getElem()+" "); p = p.getNex
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值