Sri Lanka skittled the New Zealanders for just 73 -- their second-lowest total in limited-overs internationals -- after posting 262 for six in their own innings.
Chaminda Vaas (3-10) and fellow seamer Lasith Malinga (3-14) captured six wickets between them, while off-spinner Muttiah Muralitharan polished off the tail with 2-7.
Had it not been for an unbeaten 29 by all-rounder Craig McMillan, New Zealand might have threatened their lowest ever one-day total of 64, which they made against Pakistan in Sharjah in 1985-86.
Opener Brendon McCullum (17) was the only player apart from McMillan to make double figures while three players including captain Stephen Fleming, failed to score at all.
New Zealand's dismal performance followed a dashing display by Sanath Jayasuriya and Kumar Sangakkara, who both slammed half-centuries for the tourists.
Jayasuriya rolled back the years with a dashing 70 off just 44 deliveries while Sangakkara rebuilt the innings with a sturdy 79 from 103 deliveries after New Zealand seamer Mark Gillespie snared the first three wickets.
Jayasuriya slammed seven fours and five sixes as Sri Lanka raced to 102 without loss after just 15 overs but was the first man out, caught by Michael Mason, to trigger a minor collapse.
Gillespie captured his second wicket two balls later when he dismissed Sri Lanka captain Mahele Jayawardene for a duck, caught by Fleming, who was making his first appearance in the series resting for the first three games.
Gillespie bowled Jayasuriya's opening partner Upul Tharanga for 22 to leave the tourists on 103-3 and needing to start all over again.
Sangakkara and Marvan Atapattu steadied the innings with a 91-run partnership for the fourth wicket before hitting out in the final 10 overs.
Atapattu fell to Andre Adams for 34 off 99 balls and Sangakkara, whose knock featured eight fours and a six, mistimed a shot off Shane Bond to give the New Zealand paceman the first of his two wickets.
The fifth and deciding match of the series will be played in Hamilton on Tuesday.
Sri Lanka innings
U. Tharanga b Gillespie 22
S. Jayasuriya c Mason b Gillespie 70
M. Jayawardene c Fleming b Gillespie 0
K. Sangakkara c Taylor b Bond 79
M. Atapattu c McCullum b Adams 34
C. Kapugedera not out 10
F. Maharoof c Adams b Bond 21
C. Vaas not out 5
Extras (lb-11 nb-4 w-6) 21
Total (for 6 wickets, 50 overs) 262
Fall of wickets: 1-102, 2-102, 3-103, 4-194, 5-232, 6-256
Did not bat: L. Malinga, D. Fernando, M. Muralitharan
M. Mason 10 - 1 - 62 - 0 (w-3)
S. Bond 10 - 2 - 47 - 2 (nb-2 w-2)
M. Gillespie 10 - 1 - 39 - 3 (nb-2)
A. Adams 9 - 2 - 53 - 1
J. Patel 9 - 0 - 41 - 0 (w-1)
C. McMillan 2 - 0 - 9 - 0
New Zealand innings
B. McCullum c Sangakkara b Maharoof 17
S. Fleming lbw b Vaas 0
R. Taylor lbw b Vaas 0
P. Fulton lbw b Malinga 9
H. Marshall lbw b Vaas 3
C. McMillan not out 29
A. Adams lbw b Malinga 1
S. Bond c&b Malinga 2
M. Gillespie c Sangakkara b D. Fernando 0
J. Patel b Muralitharan 6
M. Mason lbw b Muralitharan 1
Extras (lb-2 nb-2 w-1) 5
Total (all out, 26.3 overs) 73
Fall of wickets: 1-5, 2-17, 3-17, 4-25, 5-37, 6-39, 7-49, 8-54, 9-71, 10-73
C. Vaas 8 - 3 - 10 - 3
L. Malinga 8 - 3 - 14 - 3
F. Maharoof 4 - 0 - 27 - 1 (nb-1 w-1)
D. Fernando 4 - 1 - 13 - 1 (nb-1)
M. Muralitharan 2.3 - 0 - 7 - 2