ORCHARD PARK, N.Y. — Marshawn Lynch and the Buffalo Bills popgun offense finally found an opponent they could dominate.

The rookie running back threw for a touchdown and scored another rushing, sparking a 33-21 win over the defensively porous and fully demoralized Cincinnati Bengals on Sunday.

It was a breakout performance for Lynch, who had a career-best 153 yards rushing, including a 56-yard TD run that put the game away with 2:22 remaining. He also had an 8-yard touchdown pass to Robert Royal, which put the Bills ahead for good, 26-21, with 6 minutes left.

Lynch also made up for a sputtering J.P. Losman-led attack that had settled for one touchdown and four field goals during its first five trips inside the Bengals 20.

The Bills (4-4) won their third straight, their best stretch since winning six straight in 2004, and produced 479 yards of total offense, their most since producing 579 in a 42-23 win at Seattle to end the 2000 season. The 33 points were also the most Buffalo has scored since a 37-27 at Cincinnati on Dec. 24, 2005.

The Bengals (2-6) not only lost for the sixth time in seven games, they also might have lost receiver Chad Johnson, who was carted off the field with 2 minutes left.

Johnson was hurt when he was sandwiched by Bills defenders Donte Whitner and Coy Wire, while attempting to make a diving catch over the middle with 1:53 remaining. The Bengals announced Johnson, who had his neck immobilized, had movement in all extremities.

The Bengals squandered two leads, and failed to take advantage of Glenn Holt's 100-yard kickoff return that put them up 14-10 in the final two minutes of the second quarter.

The problem was a familiar one, an injury-depleted Bengals defense that entered the game allowing 385 yards and 30 points an outing.

The Bills, on the other hand, were averaging only 246 yards of offense and had managed a mere six offensive touchdowns this season.

Losman finished 24-of-34 for 271 yards passing with a touchdown and interception in making his first start in five weeks. The game was Losman's opportunity to win back his starting job, filling in for rookie Trent Edwards, who was forced to sit out because of a sprained wrist.

Lee Evans finished with nine catches for 165 yards and a touchdown, but the offense still had difficulty finishing drives.

After Evans scored on an 8-yard catch on the Bills opening drive, Buffalo settled for four Ryan Lindell field goals, all of them virtual chip shots, with the longest from 38 yards.

Lynch finally helped the Bills break through during a second-and-goal from the 8. Getting a pitchout to the right, he drew several Bengals defenders before pulling up to hit an open Royal.

T.J. Houshmandzadeh, with a 15-yard catch, and Jeremi Johnson, with a 1-yard catch, also scored for the Bengals.

For Houshmandzadeh, it was his 10th touchdown reception to set a career high. He also extended his scoring streak to eight games, marking the longest to start a season since Elroy Hirsch scored in 10 straight games with the Los Angeles Rams in 1961.

By converting Evans' touchdown, Lindell hit his 235th consecutive extra point, setting the NFL record for longest streak to open a career. The eight-year veteran passed the record set by Tommy Davis from 1959-65.