乙個查了6個小時的問題的解決過程

2021-08-02 11:18:09 字數 1251 閱讀 6245

giraph中改進**,想在edge上面加點屬性,結果發現修改後的值無法生效,pagereank用的edgenovalue類中增加乙個屬性,但是始終讀不出來值,

開始以為是使用int導致型別中間沒有進行readfiles或者write的序列化問題, 但是edgenovalue根本沒有相關方法,

且實際初始化使用的是  writableutils.reinitializevertexfromdatainput(  //實際讀入頂點值和邊值的函式

extendeddatainput, vertex, configuration)方法;

然後開始列印每條邊物件的hashcode值, 結果發現每次都不一樣,於是就懵逼了,為啥?

許久後終於發現defaultvertex 的outedgesedges 型別居然是bytearrayedges,進去後檢視發現:

private byte serializededges;

@override

public void add(edgeedge) catch (ioexception e)

serializededges = extendeddataoutput.getbytearray();

serializededgesbytesused = extendeddataoutput.getpos();

++edgecount;

}

private class bytearrayedgeiterator

extends unmodifiableiterator>

@override

public edgenext() catch (ioexception e)

return representativeedge;

}}

淚奔。。。 原來該方法為了節省邊的記憶體空間,每次讀入讀出都進行了序列化操作,妹的難怪每次生成的邊物件都不一樣。。。 都是

representativeedge

物件,能一樣麼 妹的。。。。。。。。。。。。。。。。。。。。

我的方法需要在邊上增加屬性,所以換成邊物件更符合我需求,改為arraylistedges : 

giraph.outedgesclass

org.apache.giraph.edge.arraylistedges

問題解決。

解決了乙個小問題

原來在debian上使用mplayer w32codecs一直彈出 error could not open required directshow codec drvc.so 的惱人的小問題,今天google了一下,參照fc6下mplayer安裝 執行 發現也有乙個類似libstdc so.5 n...

頭疼了乙個小時就為這個

同時用vim開啟.h和.cpp檔案看起來比較方便,於是想寫個vim指令碼來解決一下。可是竟連個簡單的function都出錯。function myfoo let filename getreg let pos strridx filename,return strpart filename,0,po...

解決了乙個連線mysql特別慢的問題

最近使用了一台ucloud的雲主機作為測試伺服器 用了以後發現了乙個問題 假設我的資料庫伺服器為d 我的應用伺服器為a 新的這臺雲主機位c 這三颱機器都不在乙個機房 問題是這樣的 從a鏈結到d,沒有問題,但是從c鏈結到d,非常慢,要將近20秒才有響應 一開始使用a鏈結d沒問題,我認為問題出在c上面 ...